正则表达式在标签中查找标签

时间:2013-09-05 21:29:45

标签: php preg-match

我是正则表达式的新手。 我希望选择块引号之间的所有内容,但是要忽略那些带有p标记的内容。

有人可以帮助我吗?

可以通过preg_match()

找到以下内容
<blockquote><a>this is a link</a><blockquote>

但不是这个

<blockquote><p><a>this is a link</a></p></blockquote>

2 个答案:

答案 0 :(得分:0)

正如@Dagon评论的那样,使用正则表达式解析HTML是Bad Idea™

那就是说,如果我们做出几个假设是可能的:

  • <p>将{strong> 正确 <{1}}后
  • <blockquote>永远不会嵌套

然后,我们可以使用negative lookahead assertion使用以下正则表达式对包含<blockquote>的所有匹配进行折扣:<p>

答案 1 :(得分:0)

执行此操作的一种简洁方法是将DOM与XPath一起使用。

如果您想使用正则表达式,可以试试这种模式:

$pattern = '~<blockquote\b[^>]*>(?:[^<]+|(?R)|<(?!/(?:blockquote|p)>))*</blockquote>~';

它处理嵌套的blockquote标签,如果在其位置内有p标签,则不匹配。