就这个答案显示(Can regular expressions be used to match nested patterns?)而言,我们无法创建可用于匹配无限嵌套模式的正则表达式。但是,我们可以创建一个匹配该模式的N个嵌套出现的正则表达式模式吗?
例如,我们如何创建一个匹配像这样的注释最多3层的正则表达式?
<*
Comment of depth 1 containing another comment
<*
That is a comment of depth 2 containing another comment
<*
Nanananananana BATMAN!!!
*>
*>
*>
答案 0 :(得分:0)
<\*[\s\S]*?<\*[\s\S]*?<\*[\s\S]*?\*>[\s\S]*?\*>[\s\S]*?\*>
一种简单的方法。参见演示。
https://regex101.com/r/sJ9gM7/129
您可以在此处使用recursive regex
。
<\*(?:(?R)|(?:(?!<\*|\*>)[\s\S])+)*\*>
参见演示。
答案 1 :(得分:0)
你在评论中说,你将把正则表达式整合到一个BNF定义中,这个定义将被送到图书馆&#34; mpc&#34;。
尝试定义这样的多行注释:
mlcomment : "<*" (<mlcomment> | /\*[^>]|[^*]/)* "*>" ;
我用mpc试了一下它就可以了。
如果它们是嵌套的,您可以发表评论。例如:
<* A multiline comment here
<* Another one here *> *>
这样做的缺点是你不能在结束标签上有多个星号。这样:
<* A multiline comment
second line **>
无法运作。但我认为它与mpc的限制一样接近。