Regex用于隔离尾随的嵌套引号标记

本教程将介绍Regex用于隔离尾随的嵌套引号标记的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

Regex用于隔离尾随的嵌套引号标记 教程 第1张

问题描述

我使用的是一些经过多年升级的旧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用于隔离尾随的嵌套引号标记的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。