因此,我对于Regex这个压倒性的世界是全新的。基本上,我使用Gedit API为语法突出显示(对于Byond的DM)创建新的自定义语言规范(从C#派生)。在DM中的转义字符中,必须使用[变量]作为转义语法,这很简单。但是,它也可以是嵌套的,例如[array/list [index]]。 (它可以无限嵌套。)我研究过其他问题,当他们询问嵌套括号时,它们只意味着嵌套,而在这种情况下,它可能是/或。正则表达式(正常或嵌套括号)
多次尝试我试过:
\[.*\]
产生的结果为 “测试[测试[测试]测试]测试[测试]测试”\[.*?\]
产生的结果为“测试[测试[测试]测试]测试[测试]测试 “\[(?:.*)\]
produces结果” 测试[试验[测试]测试]测试[测试]测试”\[(?:(?!\[|\]).)*\]
produces结果 “测试[试验[测试]测试]测试[测试]测试”。这是从https://stackoverflow.com/a/9580978/2303154派生的,但如上所述,只有在内部没有括号时才匹配。
很显然,我没有真正的想法,我在这里做更复杂的匹配,但至少我更了解其他来源的基本操作。
仔细阅读[本教程](http://www.regular-expressions.info/tutorial.html)使正则表达式的世界不那么令人难以置信。此外,嵌套结构通常是正则表达式接近崩溃的地方 - 只有.NET的正则表达式风格和PCRE支持结构可以处理不确定的嵌套。 – 2013-05-06 21:39:25
不幸的是,由于它是一个API,我不认为我可以区分,只需要使用Gedit具有XML匹配的功能; - ;.是的,这是我一直在看的主要教程之一。 – Chaos7Theory 2013-05-06 23:51:24
您的第三次和第四次尝试在语法上格式错误(因此您的测试字符串中没有任何匹配项)。我纠正了他们。 #3:您的版本'\ [(?:。*))\]'有一个重复的右括号。校正'\ [(?:。*)\]'等同于#1。 _non-capturing group_'(?:...)'在这里没有明显的目的。 #4:您的版本'\ [?:(?!\ [| \])。* \]'是非捕获组语法的一部分 - '?:' - 没有相应的括号'(...)'。 '(?:(?!\ [| \])。)'可以简化为'[^ \] \ []'(按照以下顺序列出charclass的字符时,反斜杠是可选的:'[^] []' )。 – 2014-03-15 14:27:47