0

我是正则表达式的新手。我希望选择块引号之间的所有内容,但想忽略其中包含 p 标签的内容。

有人可以帮助我吗?

可以通过 preg_match() 找到以下内容

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

但不是这个

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

2 回答 2

0

正如@Dagon 评论的那样,使用正则表达式解析 HTML 是一个坏主意™</a>。

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

  • The<p>永远在if 它存在之后<blockquote>
  • <blockquote>s 永远不会嵌套

然后,我们可以使用否定的前瞻断言来折扣包含<p>使用以下正则表达式的任何匹配/<blockquote>(?!<p>)(.*?)<\/blockquote>/

于 2013-09-05T22:07:20.573 回答
0

一个干净的方法是使用带有 XPath 的 DOM。

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

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

它处理嵌套的块引用标签,并且无论其位置是否有 ap 标签都不匹配。

于 2013-09-05T22:26:09.920 回答