如何在正则表达式中匹配所有 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]*?)\[\/]
虽然从技术上讲是正确的,但严格来说,您不能在此处使用 正则 表达式,但与其说是正确的陈述,不如说是错误的陈述。很少有语言有正则表达式的严格正则实现,最流行的正则表达式库 (PCRE) 对此任务没有问题。
现在,在正则表达式中这样做是个糟糕的主意。 ReDoS、可读性、可维护性等对于正则表达式来说都很糟糕,这些问题本身就可以排除基于正则表达式的方法。
但是这里有一个基于正则表达式的解决方案:https://regex101.com/r/q0zNBU/1
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]*?)\[\/]
虽然从技术上讲是正确的,但严格来说,您不能在此处使用 正则 表达式,但与其说是正确的陈述,不如说是错误的陈述。很少有语言有正则表达式的严格正则实现,最流行的正则表达式库 (PCRE) 对此任务没有问题。
现在,在正则表达式中这样做是个糟糕的主意。 ReDoS、可读性、可维护性等对于正则表达式来说都很糟糕,这些问题本身就可以排除基于正则表达式的方法。
但是这里有一个基于正则表达式的解决方案:https://regex101.com/r/q0zNBU/1