2012-10-22 7 views
1

큰 문자열의 문자열을 찾으려고합니다.preg 일치 전체 문자열 잡아?

예를

"빠른 갈색 여우가 너무 항상 거기 여기지만 빠른 갈색 여우는"

preg_match('(quick brown fox(.+?)too)',$txt,$match) 

문제는 "너무 항상 거기 빠른 갈색 여우"보다는 전체 문장을 잡고있다

어떻게에만 두 번째 부분을 잡아합니까? ..이 ... 유사한 문자열이 한 줄 정도에 함께있다가있는 경우

답변

1

당신의 시간을 발생 ave 2 여기에서 그룹을 캡처. 귀하의 $match 배열은 또한, 두 앞으로 당신의 정규식에 슬래시를 놓치고 ..

[0] => quick brown fox is here but quick brown fox always over there too 
[1] => quick brown fox is here but quick brown fox always over there too 
[2] => is here but quick brown fox always over there 

포함됩니다.

+0

예, 원하는 수정자를 거의 모두 사용할 수 있습니다. –

+1

사실, 주변의'()'는 구분자의 역할을합니다. 이들은 캡처 그룹이 아닙니다. – deceze

+1

@ F.Müller 아니요,'+?'는'+'의 * 욕심없는 * 버전입니다. – deceze

1

비 greedyness는 패턴의 에만 적용하므로, (실제로, 그것은 prce 일치하는 항목을 발견하면 바로 반환, 더 큰 일치를 보지 않는다는 것을 의미) :

당신이 찾고있는 무엇을, 아무것도하지만 - "빠른 갈색 여우가 너무 항상 거기 여기에 너무이며,"

preg_match('(quick brown fox(.+?)too)', $txt, $match) 

은 "빠른 갈색 여우가 너무 여기에"와 일치하지 않을 것이다.

어쩌면 $ txt를 strrev() &와 바꾸면 역전 된 패턴을 역으로 쓸 수도 있지만이 특정 문제 만 해결할 수 있습니다.

+0

그 코드는 오히려 마지막으로 일치하는 부분을 전체 문장을 반환합니다. 나는 정확한 두 번째 부분을 위해 노력하고 있습니다. 어떻게 든 첫 번째 경기를 Ignoring –