2013-01-23 5 views
0

여기 내 코드입니다. 정규식 끝 부분에 U가있을 때 어떤 차이가 있습니까?PHP 정규식으로, preg_match_all 욕심 수정

출력은 :

어레이 ([0] => 배열 ([0] => 예 : [1] => 이것이 시험))

어레이 ([0] => 배열 ([0] => 예 : 이것은 테스트입니다))

그래서 실제로 무슨 일이 일어나고 있습니까? 어떤 버전이 욕심 많은 버전이고 그 이유는 무엇입니까?

+0

또한 어떻게 할 수 있습니까? 수식어? –

+1

** 정규 표현식을 사용하여 HTML을 구문 분석하지 마십시오 **. 정규식으로 HTML을 안정적으로 구문 분석 할 수는 없습니다. HTML이 예상과 다르게 변경되면 코드가 손상됩니다. PHP 모듈을 사용하여 HTML을 올바르게 구문 분석하는 방법의 예는 http://htmlparsing.com/php.html을 참조하십시오. –

+0

@AndyLester 고마워, 난 단지 배울려고 노력하고있어 .. 고마워. –

답변

2

U는 정규 표현식에 "Ungreedy"라고 알려줍니다. 욕심은 가능한 한 많이 일치 시키려고 시도하는 반면 "불혼"은 가장 작은 매치 만 취합니다.

그래서 욕심 예에서 이상형 :

<b>example:</b><strong>this is a test</strong> 

내가 "</b><strong>" 멀리 제거하는 html 태그 중 하나를 가정 할 때 출력이 나 이미는 preg_match로. 반면

ungreedy는 다음과 같이 일치시켜 당신이 원하는 것을 :

<b>example:</b>, <strong>this is a test</strong> 

편집 :

은을 사용하여 유사한 일치를 달성하기? 당신은 할 수 있습니다 : .*? 따라서 다시 두 경기의 결과, 수 (ungreedy) 짧아야한다 태그 사이의 내용을 제한하려고하기 때문에

preg_match_all("|<[^>/]+>.*?</[^>]+>|", 
    "<b>example:</b><strong>this is a test</strong>", 
    $out, PREG_PATTERN_ORDER); 
print_r($out); 

이입니다.

+0

감사합니다. 내가 이것을 사용할 수 있습니까? 또한? –

+0

욕심 꾸러기가 가능한 한 많이 찾으려고한다는 것을 말하면 가장 일치하는 것을 찾으려고 했습니까? 왜냐하면 끝 부분에 U가있을 때 - 그것은 우스꽝 스럽기 때문에 -> 2 경기가 있기 때문입니다. U가 없을 때 - 욕심이 많습니다 -> 단 1 경기가 있습니까? –

+1

@KorayTugay 욕심쟁이 (greedy)는 가장 큰 덩어리를 차지하므로 전체 덩어리를 차지할 수 있으므로 하나만 일치합니다. – mpaepper