8

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

我尝试过的几次尝试:

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

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

4

1 回答 1

1

来自@Chaos7Theory

在阅读GtkSourceView 的规范参考后,我发现它专门使用 PCRE。然后我用它作为线索。

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

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

我希望这对将来的其他人有所帮助。

于 2013-06-19T14:17:01.920 回答