匹配<p> </p>中的一大块文本,其中某些标记重复超过2次

时间:2015-09-21 14:41:13

标签: html regex

我很难找到解决方案。

我想匹配包含2个以上<p></p>代码的<a></a>代码中的任何文本块

这是一个例子

<p style=""> (Reporting by Jason Lange; Additional reporting by <a href="http://blogs.reuters.com/search/journalist.php?edition=us&amp;n=alistairbell&amp;">Alistair Bell</a>, <a href="http://blogs.reuters.com/search/journalist.php?edition=us&amp;n=eric.walsh&amp;">Eric Walsh</a> and <a href="http://blogs.reuters.com/search/journalist.php?edition=us&amp;n=peter.cooney&amp;">Peter Cooney</a>; Editing by Ros Russell and <a href="http://blogs.reuters.com/search/journalist.php?edition=us&amp;n=eric.beech&amp;">Eric Beech</a>)</p>

我正在尝试制作一个匹配<p> </p>标签内的整个文本块的正则表达式代码,但唯一的决定因素是<a></a> TAGS的数量,我的意思是我没有想法文本是什么样的。

这是我试过的正则表达式代码:

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

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

2 个答案:

答案 0 :(得分:0)

通过将html解析为DOM而不是使用正则表达式来解决整个问题可能更好。

如果你必须你可以尝试一下这方面的事情(有一些边缘情况不适用于这个解决方案):

<p[^>]*>(.*?<a[^>]*>.*?<\/a[^>]*>.*?){2,}<\/p[^>]*>

这将匹配一个开头<p>,然后是包含<a><\a>的文字至少两次,然后是结束</p>

答案 1 :(得分:0)

试试这个:

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

我正在计算(我假设html已正确形成)

https://regex101.com/r/oK4pM4/1