Sublime 语法正则表达式只高亮分隔符内的匹配

Sublime Syntax Regex Only Highlight Match Within Delimiters

我想将字符串与出现在指定分隔符内的正则表达式匹配,但不是分隔符本身,以便在 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 解析器反序列化模式字符串后,模式将看起来像 (?<=<)([^>]*)(?=>),并且 (?<=<) 将匹配紧跟在 < 字符之前的位置,而 (?=>) 正面前瞻将确保下一个字符是 >(否则匹配将失败)。