다음과 비슷한 구조의 문자열이 있습니다 : 'aba aaa cba sbd dga gad aaa cbz'
. 문자열은 외부 소스에서와 같이 매번 조금씩 다를 수 있습니다.preg_replace를 사용하여 첫 번째 일치 만 바꾸기
'aaa'
의 첫 번째 항목 만 바꾸고 싶지만 다른 항목은 바꾸지 않습니다. 가능한가?
다음과 비슷한 구조의 문자열이 있습니다 : 'aba aaa cba sbd dga gad aaa cbz'
. 문자열은 외부 소스에서와 같이 매번 조금씩 다를 수 있습니다.preg_replace를 사용하여 첫 번째 일치 만 바꾸기
'aaa'
의 첫 번째 항목 만 바꾸고 싶지만 다른 항목은 바꾸지 않습니다. 가능한가?
preg_replace의 선택적인 네 번째 매개 변수가 limit
입니다 :
preg_replace($search, $replace, $subject, 1);
당신은이에 대한 preg_replace
의 limit
인수를 사용하고 1
으로 설정할 수 있도록 최대 하나 개의 교체가 일어나는 것을 :
$new = preg_replace('/aaa/','replacement',$input,1);
예를 들어 $ 콘텐츠가 다음과 같이 표시됩니다.
START
FIRST AAA
SECOND AAA
1) 당신이 사용하는 경우 :
가$content = preg_replace('/START(.*)AAA/', 'REPLACED_STRING', $content);
는 지난 AAA에 처음부터 모든 것을 변경하고 당신의 결과가 될 것입니다 :
REPLACED_STRING
2) 당신이 사용하는 경우 :
$content = preg_replace('/START(.*?)AAA/', 'REPLACED_STRING', $content);
결과는 다음과 같습니다.
REPLACED_STRING
SECOND AAA
왜 이것이 정확히 발생합니까? 대한 "?". – user111671
yor 대답 주셔서 감사합니다, 끝에서 시작하는 첫 경기 만 교체해야합니까? 코드는 무엇입니까? –
@josesanchez 문자열이 너무 길지 않으면 strrev를 사용하여 문자열을 뒤집을 수 있습니다.이 트릭을 사용하면 찾으려는 패턴의 반대쪽을 검색 한 다음 문자열을 다시 되돌릴 수 있습니다. 매우 길면 문자열을 두 번 뒤집어 쓰는 오버 헤드를 피하기 위해 역순으로 스캔하려고합니다. – Paulpro