如何在正则表达式中匹配所有 MyCode,包括嵌套标签?

How can I match all MyCode, including nested tags, in regex?

MyCode 是 MyBB 的基于标签的格式化系统。与捕获相关的示例格式是:

[quote]This is a quote[/quote]

[quote=Bob]This is a quote, [b]this bit is bold[/b], [quote] this is a nested quote [/quote][/quote]

[url=http://www.whosebug.com][color=#ff0000]This is an anchor with a red text color.[/color][/url]

[quote][b]
Tags can also span multiple lines.
[img]http://www.website.com/image.png[/img]
[/b]
[/quote]

到目前为止,我编写的正则表达式成功捕获了其中的大部分内容,但未能捕获某些嵌套元素。我觉得我需要正则表达式来匹配 "inner first",但我不知道该怎么做(如果可能的话。)

例如:[quote]test [b]bold[/b][/quote],需要先检查内部的[b]标签,然后是[quote]标签。同样适用于:[quote][quote]nested[/quote][/quote]

这是我到目前为止所写的内容,我对其进行了注释以帮助解释我自己。

\[(.*?)(=[^]]+)?]([\s\S]*?)\[\/]

https://regex101.com/r/emNAh2/1

虽然从技术上讲是正确的,但严格来说,您不能在此处使用 正则 表达式,但与其说是正确的陈述,不如说是错误的陈述。很少有语言有正则表达式的严格正则实现,最流行的正则表达式库 (PCRE) 对此任务没有问题。

现在,在正则表达式中这样做是个糟糕的主意。 ReDoS、可读性、可维护性等对于正则表达式来说都很糟糕,这些问题本身就可以排除基于正则表达式的方法。

但是这里有一个基于正则表达式的解决方案:https://regex101.com/r/q0zNBU/1