我正在尝试捕获以下模式“除了数据额外的所有内容”
这是搜索字符串:
<li data-extra="star" class = "result">a</li>
<li class = "result">b</li>
<li class = "result">c</li>
<li data-extra="star" class = "result">d</li>
<li class = "result">e</li>
我想只匹配b,c和e(没有数据额外的那些)
我做过类似的事情
<li(?!(data\-extra))class="result"(.*?)>
但是这不起作用(使用php preg_match_all得到0结果)
答案 0 :(得分:6)
$results = xpath_match_all('//li[not(@data-extra)]', $htmlString);
如果您还要明确包含该类,请将XPath更改为
//li[not(@data-extra) and @class="result"]
$results
变量将包含找到的节点的innerHTML和outerHTML。
答案 1 :(得分:2)
我认为你错过了正则表达式中的空白。这里有一个.NET regexp:
\s+!(data-extra).+>(.+)</li>
答案 2 :(得分:1)
答案 3 :(得分:1)
这是一种使用正则表达式的方法,尽管HTML解析器通常是一个更好的主意:
<?php
$a = '<li data-extra="star" class = "result">a</li>
<li class = "result">b</li>
<li class = "result">c</li>
<li data-extra="star" class = "result">d</li>
<li class = "result">e</li>';
preg_match_all('/<li(([^>])(?<!data\-extra))*>(.*)<\/li>/', $a, $m);
print_r($m[0]);
?>