Php 匹配不在特定HTML标记内且不包含特定单词的字符
我正在寻找执行以下操作的PHP正则表达式: (1) 获取(2)不包含单词“x x”和(3)不嵌套在Php 匹配不在特定HTML标记内且不包含特定单词的字符,php,regex,Php,Regex,我正在寻找执行以下操作的PHP正则表达式: (1) 获取(2)不包含单词“x x”和(3)不嵌套在 例如: <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> //fa
例如:
<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
这是一个//正确
这是一个x//假,有“x”
something这是一个//false,嵌套在blockquote中
正则表达式是用于此作业的不正确工具。即使只是为了“快速修复”,它仍然不是正确的工具
我喜欢在这里使用的工具称为XPath。使用PHP的DOMDocument和DOMXPath类,我们可以找到所需的值
我获取了您的HTML,然后搜索符合您条件的
标记
<?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;
}
不要用正则表达式解析HTML:)我认为正则表达式不是解决这个问题的好方法。你用什么语言工作?解析库将是一种更好的方法。@Jonny5:我正在使用PHP@VMAtm:这可能不是最佳做法,但我需要它来快速修复。是否会有嵌套的
元素?是否会有嵌套的
元素?正则表达式可以匹配(或不匹配)包含“x”的字符串,但最好使用HTML解析器过滤掉标记要求。