Regex用于隔离尾随的嵌套引号标记 [英] Regex to isolate trailing nested quote tags

查看:14
本文介绍了Regex用于隔离尾随的嵌套引号标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是一些经过多年升级的旧PHP论坛软件,但在此过程中,有些帖子的底部包含无报酬的[报价]区块。

我正在尝试找出一种运行PHP preg_place的方法来正则表达式它们。我只想删除显示在帖子内容下面的引用标记(可能还包含嵌套的引用标记)。

例如,保留原样的帖子可能如下所示:

Here is the example post text

[QUOTE]
This is an appropriate quote
[/QUOTE]

Here is more post content

在类似下面的帖子中,我想尝试删除最后一句挡路:

Here is the example post text

[QUOTE]
This is an appropriate quote
[/QUOTE]

Here is more post content

[QUOTE]
This is an unnecessary quote, as it's below all of the post text
   [QUOTE]
   Here's an unnecessary nested quote, just to confuse things.
   [/QUOTE]
[/QUOTE]

我花了几个小时试图想出一个正则表达式来捕获最后一种类型的引号块,但没有成功。我知道我需要以以下内容结束,因为结束引号在帖子的末尾总是有这个标签:

[/QUOTE]$

有没有办法捕获正则表达式中的整个最后引号块,包括任何可能的嵌套引号?到目前为止,我尝试过的任何操作都将尝试匹配嵌套的开始引号标记和最终结束标记(而不是匹配的对)。

推荐答案

您可能希望使用递归,但是锚定方法:

([QUOTE[^][]*]
(?:[^][]++|(?1))++
[/QUOTE])

请参阅a demo on regex101.com。这里只匹配末尾的报价挡路()。

这篇关于Regex用于隔离尾随的嵌套引号标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆