2008-09-02 6 views
6

안녕하세요, 제가하고 싶은 것은 첫 번째 단락의 내용입니다.HTML 태그의 내용을 가져 오는 방법은 무엇입니까?

<p>Paragraph 1</p><p>Paragraph 2</p><p>Paragraph 3</p> 

내가 실행 해요 문제는 내가 처음 <p> 태그와 첫 번째 닫기 </p> 태그 사이에 모든 것을 잡기 위해 정규식을 쓰고 있다는 것입니다 : 문자열 $blog_post는 다음과 같은 형식의 단락을 많이 포함되어 있습니다. 그러나, 그것은 첫 번째 <p> 태그와 마지막 닫는 </p> 태그를 잡아 내게 모든 것을 움켜 잡도록 만든다. 여기

내 현재 코드입니다 :

if (preg_match("/[\\s]*<p>[\\s]*(?<firstparagraph>[\\s\\S]+)[\\s]*<\\/p>[\\s\\S]*/",$blog_post,$blog_paragraph)) 
    echo "<p>" . $blog_paragraph["firstparagraph"] . "</p>"; 
else 
    echo $blog_post; 

답변

18

음, sysrqb 당신은 아무것도 일치하게됩니다 ... 쉽고 빨라집니다 단락에 다른 html이 없다고 가정하고 첫 번째 단락에서. 당신은 배치이

<p>.*?</p> 

같은 더 할 수있는 ? 당신의 *이 만 </p> 일치 전에 필요한만큼 작은 텍스트와 일치합니다 의미가 아닌 욕심 낙찰 후.

1

아마 쉽게와 처음

<p> 

의 위치와 첫

</p> 

을 찾기 위해 strpos()를 사용하는 것이 더 빠를 것 그런 다음 substr()을 사용하여 단락을 추출하십시오.

$paragraph_start = strpos($blog_post, '<p>'); 
$paragraph_end = strpos($blog_post, '</p>', $paragraph_start); 
$paragraph = substr($blog_post, $paragraph_start + strlen('<p>'), $paragraph_end - $paragraph_start - strlen('<p>')); 

편집 : 질문에 큰 복잡한 정규식 나를 혼란 ... 사실 다른 사람의 대답에 정규식

6

preg_match을 사용하는 경우 "U" 플래그를 사용하여 욕심을 없애십시오.

preg_match("/<p>(.*)<\/p>/U", $blog_post, &$matches); 

$matches[1]에는 첫 번째 단락이 포함됩니다.

0

html 구문 분석에 정규 표현식을 사용하는 것이 결코 올바른 해결책이 아닙니다. 이 경우에는 XPATH를 사용해야합니다.

$string = <<<XML 
<a> 
<b> 
    <c>texto</c> 
    <c>cosas</c> 
</b> 
<d> 
    <c>código</c> 
</d> 
</a> 
XML; 

$xml = new SimpleXMLElement($string); 

/* Busca <a><b><c> */ 
$resultado = $xml->xpath('//p[1]'); 
관련 문제