我是正则表达式的新手。 我希望选择块引号之间的所有内容,但是要忽略那些带有p标记的内容。
有人可以帮助我吗?
可以通过preg_match()
找到以下内容<blockquote><a>this is a link</a><blockquote>
但不是这个
<blockquote><p><a>this is a link</a></p></blockquote>
答案 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标签,则不匹配。