2011-03-21 4 views
0
<?php 
$str= <<<ETO 
<p>one 
two</p> 
<p>three</p> 
ETO; 
preg_match_all('/<p>(.*?)<\/p>/',$str,$r); 
print_r($r); 
?> 

나는 preg_match_all을 공부하고 있습니다. 기사 하나에서 모두 p을 얻고 싶습니다. 하지만 내 코드는 두 번째 코드를 얻습니다. p. 내가 처음으로 p을 얻을 수 있도록 수정하는 방법. 감사.PHP preg 모두 일치 'p`

+0

잘못 학습하고 있습니다. – BoltClock

+0

@BoltClock, 더 가르쳐 줄 수 있니? 감사. – cj333

+3

HTML을 파싱하는 데 정규식을 사용하는 것이 잘못된 도구 일 때가 있습니다. – BoltClock

답변

4

정규식 끝에 /ims 플래그가 누락되었습니다. 그렇지 않으면 .은 줄 바꿈과 일치하지 않습니다 (첫 번째 단락 에서처럼). 사실 /s이면 충분 하겠지만, 나는 항상 단순함을 위해이 세 가지를 모두 사용하고 있습니다.

또한 preg_match는 많은 간단한 경우에 사용됩니다.

foreach (qp($html)->find("p") as $p) { print $p->text(); } 
+0

오른쪽, 감사합니다. 나는 그것을 무시하고 더 많은 책을 읽습니다. – cj333

2

을 개행 문자가 일치하지 않습니다 (*?.) : 당신은 더 이상 복잡한 추출을 시도하는 경우, 그때를 허용 phpQuery 또는 QueryPath에 교대로 고려한다./s 한정자를 사용하십시오.