将HTML中的文本与PHP';s正则表达式函数
可能的重复项:将HTML中的文本与PHP';s正则表达式函数,php,regex,preg-match,Php,Regex,Preg Match,可能的重复项: 我有大量文本的格式如下: <P><B>1- TITLE</B> <P> <DL><DD> Text text text text text text text </DL><P> <P><B>2 - Title 2</B> <P>
我有大量文本的格式如下:
<P><B>1- TITLE</B>
<P>
<DL><DD> Text text text text text
text text
</DL><P>
<P><B>2 - Title 2</B>
<P>
<DL><DD> Text text text text text
text text Text text text text text
text text Text text text text text
text text
<br><I>Additional irrelevant information</I>
</DL><P>
1-标题
文本文本文本文本文本
文本
2-标题2
文本文本文本文本文本
文本文本文本文本文本文本文本文本
文本文本文本文本文本文本文本文本
文本
其他无关信息
我试图使用PHP的Regexp函数来检索标题文本值对,同时去掉一些文本块后面的额外字符以及不相关的信息。我希望:
抓住和之间的所有内容作为标题
抓取之间的所有文本
<DL><DD>
下一个HTML标记(正如对您的问题的评论所表明的,在堆栈溢出中经常会出现类似的问题,正确的答案通常是“不要试图用正则表达式解析HTML”。除此之外,我认为在答案中提供一个例子,说明如何采取建议的方法是有益的。对于您问题中的情况,可以:
<?php
$html = <<<EOF
<P><B>1- TITLE</B>
<P>
<DL><DD> Text text text text text
text text
</DL><P>
<P><B>2 - Title 2</B>
<P>
<DL><DD> Text text text text text
text text Text text text text text
text text Text text text text text
text text
<br><I>Additional irrelevant information</I>
</DL><P>
EOF;
$d = new DomDocument;
$d->loadHtml($html);
$xp = new DomXpath($d);
$matches = $xp->query("//p/b", $d);
foreach ($matches as $dn) {
echo "Title is: " . $dn->nodeValue . "\n";
$dl = $dn->parentNode->nextSibling->nextSibling->firstChild;
$dd = $dl->firstChild;
echo "Content is: " . $dd->nodeValue . "\n";
}
?>
根据您需要的健壮程度,您可能希望检查下一个sibling
和children是否是具有您期望的名称的标记,但这表明了想法。*叹气*我不知道这些问题是否会停止。@Tomalak,您希望!只需找到一个类似的问题,然后投票关闭。最好在someo之前ne出现了,或者发布了一个链接XHTML正则表达式的答案,或者“blah regex blah 2 problems”—quote。可能是重复的,…,谢谢马克,我从来没有想过使用DOM模型来解析它(我是一名ASP程序员)。你为我节省了大量时间来处理正则表达式!