正则表达式(正常或嵌套括号)

时间:2013-05-06 20:15:30

标签: regex nested pcre brackets

所以我对全新的正则表达世界完全陌生。基本上,我正在使用Gedit API来创建一个新的自定义语言规范(从C#派生)用于语法高亮(对于来自Byond的DM)。在DM中的转义字符中,您必须使用 [variable] 作为转义语法,这很简单。但是,它也可以嵌套,例如 [array / list [index]] 。 (它可以无限嵌套。)我已经查看了其他问题,当他们询问嵌套括号时,它们只表示嵌套,而在这种情况下它可能是/或。

我尝试了几次尝试:

  • \[.*\]生成结果“Test [Test [Test] Test] Test [Test] Test”
  • \[.*?\]生成结果“Test [Test [Test] Test] Test [Test] Test”
  • \[(?:.*)\] produces结果“测试 [测试[测试]测试]测试[测试] 测试”
  • \[(?:(?!\[|\]).)*\] produces结果“测试[测试 [测试] 测试]测试 [测试] 测试”。这来自https://stackoverflow.com/a/9580978/2303154,但如上所述,只有在内部没有括号时才匹配。

显然我不知道我在这里做的更复杂的匹配,但至少我了解更多来自其他来源的基本操作。

1 个答案:

答案 0 :(得分:1)

来自@Chaos7Theory

在阅读GtkSourceView's Specification Reference后,我发现它特意使用了PCRE。然后我用它作为领导。

深入研究并通过反复试验,我得到了它:

\[(([^\[\]]*|(?R))*)\]

我希望将来可以帮助别人。