HTML 태그의 내용을 가져오는 방법은 무엇입니까?
-
09-06-2019 - |
문제
안녕하세요, 제가 하고 싶은 것은 첫 번째 문단의 내용을 가로채는 것입니다.문자열 $blog_post
다음 형식의 많은 단락이 포함되어 있습니다.
<p>Paragraph 1</p><p>Paragraph 2</p><p>Paragraph 3</p>
내가 겪고 있는 문제는 첫 번째 사이의 모든 것을 가져오는 정규식을 작성하고 있다는 것입니다. <p>
태그와 첫 번째 종료 </p>
꼬리표.그런데 먼저 잡아먹는다. <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;
해결책
음, sysrqb에서는 단락에 다른 HTML이 없다고 가정하고 첫 번째 단락의 모든 항목을 일치시킬 수 있습니다.당신은 이와 같은 것을 더 원할 수도 있습니다
<p>.*?</p>
배치 ?
당신의 후에 *
탐욕스럽지 않게 만듭니다. 즉, 일치하기 전에 필요한 만큼의 작은 텍스트만 일치합니다. </p>
.
다른 팁
당신이 사용하는 경우 preg_match
, 사용 "유" 탐욕스럽지 않게 플래그를 지정합니다.
preg_match("/<p>(.*)<\/p>/U", $blog_post, &$matches);
$matches[1]
그러면 첫 번째 단락이 포함됩니다.
아마 사용하는 것이 더 쉽고 빠를 것입니다. strpos() 첫 번째 위치를 찾으려면
<p>
그리고 먼저
</p>
그런 다음 사용 하위 문자열() 단락을 추출합니다.
$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>'));
편집하다: 실제로 다른 사람의 답변에 있는 정규식은 더 쉽고 빠릅니다.질문에 대한 당신의 크고 복잡한 정규식은 나를 혼란스럽게 만들었습니다 ...
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]');
제휴하지 않습니다 StackOverflow