php preg_match_all获取两个相同元素之间的字符串

时间:2013-09-30 16:53:05

标签: php tags element preg-match-all

请,我想在两个相同的元素之间获取每个字符串(仅强,不在强和/强之间)。

示例字符串:

<strong>NAME1</strong><br />Some text, some text<br />
<strong>NAME2</strong><br />Some text2, some text2<br />
<strong>NAME3</strong><br />Some text3, some text3<br />

我试试这个:

preg_match_all("'<strong>(.*?)<strong>'si", $text, $match);

但结果是:

<strong>NAME1</strong><br />Some text, some text<br /><strong>
<strong>NAME3</strong><br />Some text3, some text3<br />

,, NAME2&#34; with ,, some text2&#34;失踪,为什么?

非常感谢, 问候, 卢卡斯

1 个答案:

答案 0 :(得分:0)

<强> THE PONY HE COMES

现在已经不在了,我们在这里得到一些解析器代码,嗯?

$dom = new DOMDocument();
$dom->loadHTML($text);
$bodychlldren = $dom->getElementsByTagName('body')->item(0)->childNodes;
$outputtags = array();
$currentTag = null;
$count = $bodychildren->length;
for( $i=0; $i<$l; $i++) {
    $node = $bodychildren->item($i);
    if( strtolower($node->nodeName) == "strong") {
        if( $currentTag !== null) $outputtags[] = $currentTag;
        $currentTag = "";
    }
    if( $node->nodeType == XML_ELEMENT_NODE) $currentTag .= $dom->saveHTML($node);
    else $currentTag .= $node->nodeValue;
}
if( $currentTag) $outputtags[] = $currentTag;

这实际上比我想象的还要丑陋。咦。

如果确实想要使用正则表达式,您可以试试这个:

"(<strong>(.*?)(?=<strong>))si"

这会查找以下<strong>,但不会在匹配中包含它,从而允许显示NAME2