我正在寻找执行以下操作的PHP正则表达式:
(1)在<p>
标签内获取文本,其中(2)不包含单词“x x x”和(3)未嵌套在<blockquote>
示例:
<p>This is one</p> //true
<p>This is one x x x</p> //false, has "x x x"
<blockquote><i>something</i><p>This is one</p></blockquote> //false, nested inside blockquote
答案 0 :(得分:3)
正则表达式是此作业的错误工具。即使只是为了“快速修复”,它仍然不是正确的工具。
我喜欢在这里使用的工具称为XPath。使用PHP的DOMDocument和DOMXPath类,我们可以找到您想要的值。
我使用了您的HTML,然后搜索了符合您条件的<p>
个标签。
<?php
$html = <<<END
<p>This is one</p>
<p>This is one x x x</p>
<blockquote><i>something</i><p>This is one</p></blockquote>
END;
$DOM = new DOMDocument;
$DOM->loadHTML($html);
$xPath = new DOMXPath($DOM);
$p = $xPath->query('//p[not(contains(text(), "x x x")) and not(ancestor::blockquote)]');
foreach($p as $e){
echo $e->nodeValue;
}
编辑:使用更好的XPath查询更新答案以使用嵌套标记。