用于匹配固定深度的嵌套内容的正则表达式模式

Regex pattern to match nested contents of fixed depth

就此答案显示 (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!!!
         *>
      *> 
    *>
<\*[\s\S]*?<\*[\s\S]*?<\*[\s\S]*?\*>[\s\S]*?\*>[\s\S]*?\*>

一个简单的方法。查看演示。

https://regex101.com/r/sJ9gM7/129

你可以在这里使用recursive regex

<\*(?:(?R)|(?:(?!<\*|\*>)[\s\S])+)*\*>

查看演示。

https://regex101.com/r/sJ9gM7/131

您在评论中说您将把正则表达式集成到 BNF 定义中,该定义将提供给库 "mpc"。

尝试像这样定义多行注释:

mlcomment    : "<*" (<mlcomment> | /\*[^>]|[^*]/)* "*>" ;

我用 mpc 试了一下,效果很好。

你可以有评论,不管它们是否嵌套。例如:

<* A multiline comment here
<* Another one here *> *>

这样做的缺点是结束标记上不能有多个星号。这个:

<* A multiline comment
second line **>

行不通。但我认为它与 mpc 的限制一样接近。