所以我对全新的正则表达世界完全陌生。基本上,我正在使用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,但如上所述,只有在内部没有括号时才匹配。显然我不知道我在这里做的更复杂的匹配,但至少我了解更多来自其他来源的基本操作。
答案 0 :(得分:1)
在阅读GtkSourceView's Specification Reference后,我发现它特意使用了PCRE。然后我用它作为领导。
深入研究并通过反复试验,我得到了它:
\[(([^\[\]]*|(?R))*)\]
我希望将来可以帮助别人。