在语法定义中表示Sublime Text正则表达式中的“小于”符号

时间:2013-10-24 16:40:47

标签: regex sublimetext2

我正在使用一个古老的前XML标记,它使用“$ = x”形式的代码,其中x可以是字母字符或键盘上的符号,例如;(分号) ,?(问号)或<左尖括号,又名大于小于)。 [编辑后的注意事项:原始措辞中出现的问题表现在问题的核心。请参阅我对已接受答案的评论。 RS]

所以我在我的User文件夹中修改了XML.tmLanguage语法定义文件的副本,以识别这些代码所代表的11个不同类别,因此我可以在大文本文件(也包含XML标记)中轻松查看它们我正在使用。

对于除<之外的所有符号,我可以通过在反斜杠前加上符号来转义符号。但是在ST2使用的Boost正则表达式引擎中,\<是指示您只想在单词的开头匹配的方式。因此,我无法正确识别和突出显示此代码。

在这种情况下,我到处寻找如何逃避<符号。我试过用0,1,2,3和4反斜杠加注它;我也尝试使用十六进制转义码\x{3009}。 [注意:这是大于而不是小于的代码。]

一切都是徒劳的。 (一些替代方案没有生成错误消息,但也没有突出显示代码。)

因为我正在处理的代码需要采用不同的颜色,我不能使用通用符号代替<,我也不能指定它。我怎么得到这个?

2 个答案:

答案 0 :(得分:2)

尝试使用&gt;作为语法文件。

答案 1 :(得分:2)

tmLanguage文件是用XML编写的,所以Sublime Text首先通过XML解析器提供它,然后再将它们提供给它的正则表达式引擎的解析器。

XML使用<打开<string>等标记,因此您无法将其直接用作字符。相反,有这些标准字符引用:

    {li> &amp; &(&符号)
  • &lt;代表<(小于)
  • &gt;代表>(大于;不需要)
  • &quot;代表"(引号;仅在"引用的属性值中需要)
  • &apos;代表'(撇号;仅在'引用的属性值中需要)

所以在语法文件中使用<string>\$=&lt;</string>当Sublime Text读取文件时,它自己的XML解析器会将其转换为\$=<的正则表达式解析器。

反斜杠序列没有帮助,因为XML解析器将它们不加改变地传递给正则表达式解析器,后者然后看到\<\\,这两者都不是你想要的。

\x{3008}由XML解析器传递给正则表达式解析器,在那里它被解码为,这个字符看起来有点像<但与之不匹配。 \x3C会起作用。

顺便说一句,tmLanguage文件使用plist(属性列表)XML,因此您可以将其转换为更易于编辑的格式,或者使用plist编辑器,例如http://tustin2121.github.io/jsPlistor/(来自Is there any online .plist editor?