我正在尝试为嵌套表达式突出显示正确的语法。模式是`(重音符号)和' 之间的所有文字都应突出显示,直到有相同数量的`和' 字符。例如,所有这些表达式都应该全部突出显示(看起来像双引号实际上是两个单撇号):
`variable'
`variable_`1''
`variable_`1'_`1''
问题在于我无法完全突出显示最后一个表达式。第二个下划线未突出显示,因为第一个' 返回正匹配。 (第二个下划线可以是任何字符,因此需要一个通用的解决方案。)现在我有:
<dict>
<key>begin</key>
<string>`(?!")</string>
<key>end</key>
<string>(?<!")''|'</string>
<key>name</key>
<string>string.quoted.single.stata</string>
</dict>
括号内的表达式是需要保留的前瞻和后瞻。
答案 0 :(得分:1)
我为不同的语法编写了一个TextMate语法,其变量可以嵌套为${var1${var2}}
。使用正则表达式是可能的,但是您只能处理指定的嵌套级别,因为正则表达式不是递归的。
对于任意嵌套变量,$self
子模式取得了更多成功。
<!-- Variables with nested variables -->
<key>VariableNested</key>
<dict>
<key>begin</key>
<string>\$\{</string>
<key>end</key>
<string>\}</string>
<key>patterns</key>
<array>
<!-- recursive match on $self -->
<dict>
<key>include</key>
<string>$self</string>
</dict>
<!-- the variable name inside the brackets -->
<dict>
<key>match</key>
<string>[^}]</string>
<key>name</key>
<string>variable</string>
</dict>
</array>
</dict>
我认为你可以为了你的目的修改它。
<!-- Variables with nested variables -->
<key>VariableNested</key>
<dict>
<key>begin</key>
<string>`</string>
<key>end</key>
<string>'</string>
<key>patterns</key>
<array>
<!-- recursive match on $self -->
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
这是TextMate manual的链接,他们简要地(!)解释了一些事情。