Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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中正则表达式和负匹配的帮助吗_Php_Regex_Preg Match All_Regex Negation - Fatal编程技术网

需要php中正则表达式和负匹配的帮助吗

需要php中正则表达式和负匹配的帮助吗,php,regex,preg-match-all,regex-negation,Php,Regex,Preg Match All,Regex Negation,我试图匹配一段: <p>content</p> 内容 一个简单的(.*?有效,但有时该段落包含另一段,因此我的模式在第一段结束后匹配,直到第二段结束 导致我出现问题的段落如下所示: <p><p><b>something</b></p>content</p> 某物内容 我如何匹配主段落而忽略其中的任何其他p标记 我试过了 <p>(.*?)(?<!</b>)</

我试图匹配一段:

<p>content</p>
内容

一个简单的
(.*?

有效,但有时该段落包含另一段,因此我的模式在第一段结束后匹配,直到第二段结束

导致我出现问题的段落如下所示:

<p><p><b>something</b></p>content</p>
某物

内容

我如何匹配主段落而忽略其中的任何其他p标记

我试过了

<p>(.*?)(?<!</b>)</p>
(*?)

但它不起作用


我使用的是preg_match_all php函数。

regex对于解析嵌套标记非常糟糕。这就是为什么要使用dom或xml解析器

regex在解析嵌套标记时非常糟糕。这就是为什么要使用dom或xml解析器

当我需要处理这样的情况时,我创建了一个递归函数findClosingTag,用于查找下一个结束标记的索引(例如

)。如果在该索引之前还有另一个开始标记(例如,
),那么我将递归并查找与该嵌套开始标记相近的开始标记。继续,直到到达原始标记的末尾。也许不是最有效的,但如果不需要的话,可能比解析完整的DOM要好


我现在没有这个片段,但它非常简单。

当我需要处理类似的情况时,我创建了一个递归函数findClosingTag,用于查找下一个结束标记的索引(例如

)。如果在该索引之前还有另一个开始标记(例如,
),那么我将递归并查找与该嵌套开始标记相近的开始标记。继续,直到到达原始标记的末尾。也许不是最有效的,但如果不需要的话,可能比解析完整的DOM要好


我现在没有这个代码片段,但它非常简单。

为什么不使用HTML解析器呢?因为我正在处理一个包含很多模式的现有代码,而这个模式是唯一不起作用的模式,我不想从头开始重新编码。为什么不使用HTML解析器呢?因为我正在处理一个有很多模式的现有代码,而这个模式是唯一一个不起作用的模式,我不想从头开始重新编码。你在这里真是太棒了!那天你帮了我很多忙!我想强调这一点。Regex不仅仅在解析嵌套标记方面“糟糕”。他们没有能力做这件事。正则表达式无法分析嵌套结构。从根本上说,从数学上讲,它们不具备这种能力。还可以看到很多问题中的任何一个,人们问他们如何使用正则表达式解析HTML。你在这里真是太棒了!那天你帮了我很多忙!我想强调这一点。Regex不仅仅在解析嵌套标记方面“糟糕”。他们没有能力做这件事。正则表达式无法分析嵌套结构。从根本上说,从数学上讲,它们不具备这种能力。还可以看到很多关于如何使用正则表达式解析HTML的问题。感谢这似乎是一个很好的解决方案,我现在用一个快速而讨厌的“黑客”解决了这个问题,使用preg_replace并删除了引起问题的第二个。感谢这似乎是一个不错的解决方案,我现在用一个快速而讨厌的方法解决了这个问题用preg_替换并移除引起问题的第二个“hack”。