2011-07-18 6 views
45

다음과 비슷한 구조의 문자열이 있습니다 : 'aba aaa cba sbd dga gad aaa cbz'. 문자열은 외부 소스에서와 같이 매번 조금씩 다를 수 있습니다.preg_replace를 사용하여 첫 번째 일치 만 바꾸기

'aaa'의 첫 번째 항목 만 바꾸고 싶지만 다른 항목은 바꾸지 않습니다. 가능한가?

답변

86

preg_replace의 선택적인 네 번째 매개 변수가 limit입니다 :

preg_replace($search, $replace, $subject, 1); 
+0

yor 대답 주셔서 감사합니다, 끝에서 시작하는 첫 경기 만 교체해야합니까? 코드는 무엇입니까? –

+2

@josesanchez 문자열이 너무 길지 않으면 strrev를 사용하여 문자열을 뒤집을 수 있습니다.이 트릭을 사용하면 찾으려는 패턴의 반대쪽을 검색 한 다음 문자열을 다시 되돌릴 수 있습니다. 매우 길면 문자열을 두 번 뒤집어 쓰는 오버 헤드를 피하기 위해 역순으로 스캔하려고합니다. – Paulpro

8

당신은이에 대한 preg_replacelimit 인수를 사용하고 1으로 설정할 수 있도록 최대 하나 개의 교체가 일어나는 것을 :

$new = preg_replace('/aaa/','replacement',$input,1); 
0

예를 들어 $ 콘텐츠가 다음과 같이 표시됩니다.

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 
+0

왜 이것이 정확히 발생합니까? 대한 "?". – user111671

관련 문제