Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 匹配不在特定HTML标记内且不包含特定单词的字符_Php_Regex - Fatal编程技术网

Php 匹配不在特定HTML标记内且不包含特定单词的字符

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

我正在寻找执行以下操作的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> //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解析器过滤掉标记要求。