2014-08-27 2 views
1

이전 PHP 소스를 탐색 중이 었는데 이해할 수없는 패턴을 발견했습니다 (인터넷에서 복사/과거를 몇 번이나 ...). . 여기 정규식에서 물음표를 추가하면 무엇이 변경됩니까? +

는 PHP와 함께 사용하여 간단한 exemple입니다 : '?'

echo preg_replace('#color="(.+)"#', '$1', 'color="red" color="black"'); 
// Echo 'red" color="black', which is fine because the (.+) try to match the largest possible string. 

echo preg_replace('#color="(.+?)"#', '$1', 'color="red" color="black"'); 
// Echo 'red black', why ? There is some black magic behind '(.+?)' I don't understand ! 

그래서 무엇을한다 '(. +?)'할까요? 나는 그것이 '정규 표현식의 나머지 부분과 일치하지 않는다'고 가정하지만 자세한 설명을 찾고 있습니다! ?

+1

'? '''후에 정규 표현식 엔진이 가능한 가장 짧은 매치 (강요 적이 지 않거나 꺼리는)를하도록합니다. –

+0

그것은 마지 못해 한정어입니다. '. +'와 일치하는 가장 작은 시퀀스를 찾습니다. 더 많은 정보 : http://stackoverflow.com/questions/5319840/greedy-vs-reluctant-vs-possessive-quantifiers – Aserre

+1

[참고 -이 정규식은 무엇을 의미합니까?] (http://stackoverflow.com/questions)/22937618/reference-what-does-this-regex-mean) –

답변

1

+은연산자입니다. 가능한 한 많이 소비합니다. 따라서 .+은 최대한 일치하고 정규 표현식의 나머지 부분이 일치하도록 허용합니다. 당신이 물음표 +?를 지정하면, 당신은 정규식 엔진을 말하는 것 (는 욕심하지 않습니다를 ...은 즉시 따옴표 "가 ... 중지 발견, 당신은 완료됩니다.)

1

는 표현 .+? 오히려 기본 동작 가능한 어떤으로 일치하는 것보다, 정규식 일치를 만들기 위해 가능한 한 적은 수의 문자와 일치하는 것을 의미, 경기 비 욕심 있습니다.

관련 문제