用于匹配固定深度的嵌套内容的正则表达式模式
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])+)*\*>
查看演示。
您在评论中说您将把正则表达式集成到 BNF 定义中,该定义将提供给库 "mpc"。
尝试像这样定义多行注释:
mlcomment : "<*" (<mlcomment> | /\*[^>]|[^*]/)* "*>" ;
我用 mpc 试了一下,效果很好。
你可以有评论,不管它们是否嵌套。例如:
<* A multiline comment here
<* Another one here *> *>
这样做的缺点是结束标记上不能有多个星号。这个:
<* A multiline comment
second line **>
行不通。但我认为它与 mpc 的限制一样接近。
就此答案显示 (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])+)*\*>
查看演示。
您在评论中说您将把正则表达式集成到 BNF 定义中,该定义将提供给库 "mpc"。
尝试像这样定义多行注释:
mlcomment : "<*" (<mlcomment> | /\*[^>]|[^*]/)* "*>" ;
我用 mpc 试了一下,效果很好。
你可以有评论,不管它们是否嵌套。例如:
<* A multiline comment here
<* Another one here *> *>
这样做的缺点是结束标记上不能有多个星号。这个:
<* A multiline comment
second line **>
行不通。但我认为它与 mpc 的限制一样接近。