需要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”。