Html 匹配内部的文本块<;p></p>;某些标签重复2次以上

Html 匹配内部的文本块<;p></p>;某些标签重复2次以上,html,regex,Html,Regex,我正在努力找到解决办法 我想匹配标记中包含2个以上的任何文本块,以及;编辑:罗斯·拉塞尔和 我正试图找出一个正则表达式代码,它将匹配标记中的整个文本块,但唯一的决定因素是标记的数量,我的意思是我不知道文本是什么样的 以下是我尝试过的正则表达式代码: <p.*?>(\s+|\n+|)((.*?|)<a.*?>(.*?|)</a>(.*?|)){2,}(\s+|\n+|)</p> (\s+\n+)(.*?)(.*?)(.*?)(.*?)(.*?){

我正在努力找到解决办法

我想匹配

标记中包含2个以上
的任何文本块,以及;编辑:罗斯·拉塞尔和

我正试图找出一个正则表达式代码,它将匹配

标记中的整个文本块,但唯一的决定因素是
标记的数量,我的意思是我不知道文本是什么样的

以下是我尝试过的正则表达式代码:

<p.*?>(\s+|\n+|)((.*?|)<a.*?>(.*?|)</a>(.*?|)){2,}(\s+|\n+|)</p>
(\s+\n+)(.*?)(.*?)(.*?)(.*?)(.*?){2,}(\s+\n+|)

它不起作用。
有什么想法吗?

最好通过将html解析为DOM而不是使用regexp来解决整个问题

如果必须,您可以尝试类似的方法(有些边缘情况不适用于此解决方案):

]*>(.*?]*>.*?]*>.*?{2,}]*>
这将匹配开头的
,然后包含
的文本至少两次,然后匹配结尾的
尝试以下操作:

/^<p.*(?=(\<\/a>).*(\<\/a>)).*<\/p>$/mg

/^看看“.”为什么仅仅
(.*)

是不够的?是否需要排除
s或
s?
,然后在
(.*)
中也不需要
()
<代码>
不好-使用
[^>]
而不是
。“它不工作”是什么意思?会发生什么?你用什么语言或工具测试这个正则表达式?“你试过使用XML解析器了吗?”当它没有找到2个
标记时,它也会直接经过

,进入下一个
,然后从那里继续。如果
标记包含另一个
标记,它也将不起作用。你是对的。一般来说,不可能用regexp正确解析层次结构。还有其他边缘情况,如

。它会使正则表达式复杂,以确保中间没有闭包

。这就是为什么最好通过将html解析为dom而不是使用regexp来解决整个问题的原因
<p[^>]*>(.*?<a[^>]*>.*?<\/a[^>]*>.*?){2,}<\/p[^>]*>
/^<p.*(?=(\<\/a>).*(\<\/a>)).*<\/p>$/mg