我是正则表达式的新手。我希望选择块引号之间的所有内容,但想忽略其中包含 p 标签的内容。
有人可以帮助我吗?
可以通过 preg_match() 找到以下内容
<blockquote><a>this is a link</a><blockquote>
但不是这个
<blockquote><p><a>this is a link</a></p></blockquote>
我是正则表达式的新手。我希望选择块引号之间的所有内容,但想忽略其中包含 p 标签的内容。
有人可以帮助我吗?
可以通过 preg_match() 找到以下内容
<blockquote><a>this is a link</a><blockquote>
但不是这个
<blockquote><p><a>this is a link</a></p></blockquote>
正如@Dagon 评论的那样,使用正则表达式解析 HTML 是一个坏主意™</a>。
也就是说,如果我们做出几个假设是可能的:
<p>
将永远在if 它存在之后<blockquote>
<blockquote>
s 永远不会嵌套然后,我们可以使用否定的前瞻断言来折扣包含<p>
使用以下正则表达式的任何匹配/<blockquote>(?!<p>)(.*?)<\/blockquote>/
:
一个干净的方法是使用带有 XPath 的 DOM。
如果你想使用正则表达式,你可以试试这个模式:
$pattern = '~<blockquote\b[^>]*>(?:[^<]+|(?R)|<(?!/(?:blockquote|p)>))*</blockquote>~';
它处理嵌套的块引用标签,并且无论其位置是否有 ap 标签都不匹配。