崇高的语法正则表达式仅突出显示分隔符内的匹配项



我想将字符串与指定分隔符中出现的正则表达式匹配,而不是分隔符本身,以便在Sublime Text包中进行语法突出显示。我正在运行 ST3。

例如,在 sublime-notes 包中,这个<dict>元素用于匹配<>之间的文本,包括尖括号本身,这会导致<this>被突出显示,而不仅仅是<this>。

<dict>
<key>comment</key>
<string>Important, surrounded by &lt;...&gt;</string>
<key>match</key>
<string>(&lt;[^&gt;]*&gt;)</string>
<key>name</key>
<string>constant.other.date.notes</string>
</dict>

如何修改<string>标记之间的正则表达式以在语法突出显示中不包含肘部括号?

您可以将左右分隔符放在环视构造中:

<string>(?&lt;=&lt;)([^&gt;]*)(?=&gt;)</string>

或者,使用 CDATA 块来避免序列化特殊的 XML 字符:

<string><![CDATA[(?<=<)([^>]*)(?=>)]]></string>

在 XML 解析器反序列化模式字符串后,模式将看起来像(?<=<)([^>]*)(?=>),并且(?<=<)将匹配紧跟在<char 前面的位置,而(?=>)积极的前瞻将确保下一个字符>(否则匹配将失败)。

最新更新