将HTML中的文本与PHP';s正则表达式函数

将HTML中的文本与PHP';s正则表达式函数,php,regex,preg-match,Php,Regex,Preg Match,可能的重复项: 我有大量文本的格式如下: <P><B>1- TITLE</B> <P> <DL><DD>&nbsp;&nbsp;&nbsp; Text text text text text text text </DL><P> <P><B>2 - Title 2</B> <P>

可能的重复项:

我有大量文本的格式如下:

    <P><B>1- TITLE</B>
    <P>
    <DL><DD>&nbsp;&nbsp;&nbsp; Text text text text text
text text
    </DL><P>
    <P><B>2 - Title 2</B>
    <P>
    <DL><DD>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;


下一个HTML标记(正如对您的问题的评论所表明的,在堆栈溢出中经常会出现类似的问题,正确的答案通常是“不要试图用正则表达式解析HTML”。除此之外,我认为在答案中提供一个例子,说明如何采取建议的方法是有益的。对于您问题中的情况,可以:

<?php

$html = <<<EOF
    <P><B>1- TITLE</B>
    <P>
    <DL><DD>&nbsp;&nbsp;&nbsp; Text text text text text
text text
    </DL><P>
    <P><B>2 - Title 2</B>
    <P>
    <DL><DD>&nbsp;&nbsp;&nbsp; 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程序员)。你为我节省了大量时间来处理正则表达式!