拜托,我想获取两个相同元素之间的每个字符串(只有强,而不是强和/strong之间)。
示例字符串:
<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"与,,某些文本2"缺失,为什么?
非常感谢,问候卢卡斯
他来的小马
既然已经解决了,我们在这里得到一些解析器代码怎么样,嗯?
$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
出现。