如何在 Sublime 包开发 YAML tmlanguage 中匹配以运算符分隔的字符串
How to match operator-separated strings in Sublime Package Development YAML tmlanguage
我正在使用 PackageDevelopment 的 .YAML-tmLanguage 在 sublime text 2 中为自定义语言定义语法。现在我希望我的语法能够将字符串识别为非字符串。
示例代码行:
string name = "Chuck Norris";
string message = "I am " + name + ", don't mess with a \"ROCKSTAR\"!";
我的双引号字符串模式:
- comment: strings in double quotes
match: (".+")
captures:
'1': {name: string.quoted.double.me}
模式捕获的内容:
字符串名称="Chuck Norris"
;
字符串消息 = "I am " + name + ", don't mess with a "ROCKSTAR"!"
;
上面的第 1 行是正确的,但第 2 行似乎涵盖了所有内容。
我想要的是:
字符串名称="Chuck Norris"
;
字符串消息 = "I am "
+ 名称 + ", don't mess with a "ROCKSTAR"!"
;
您需要匹配所有非 "
的字符以及 \
+引号之间的任何字符的组合。
使用
"[^"\]*(?:\.[^"\]*)*"
也可以写成"(?:[^"\]|\.)*"
。它更容易阅读,但效率较低。
我发现了一个很好的实现方式,可以使用 YAML 匹配以运算符分隔的字符串以及匹配双引号字符串和一些附加功能。
@Wiktor Stribiżewv 的回答也解决了这个问题,但我找到了一个很好的实现:
- comment: strings in double quotes
name: string.quoted.double.hit
begin: \"
end: \"
patterns:
- comment: escape characters
name: constant.character.escape.hit
match: \.
- comment: special characters
name: constant.character.hit
match: \%.
这也匹配转义字符,如 \"
、\n
和特殊字符 %s
、%d
我正在使用 PackageDevelopment 的 .YAML-tmLanguage 在 sublime text 2 中为自定义语言定义语法。现在我希望我的语法能够将字符串识别为非字符串。
示例代码行:
string name = "Chuck Norris";
string message = "I am " + name + ", don't mess with a \"ROCKSTAR\"!";
我的双引号字符串模式:
- comment: strings in double quotes
match: (".+")
captures:
'1': {name: string.quoted.double.me}
模式捕获的内容:
字符串名称="Chuck Norris"
;
字符串消息 = "I am " + name + ", don't mess with a "ROCKSTAR"!"
;
上面的第 1 行是正确的,但第 2 行似乎涵盖了所有内容。
我想要的是:
字符串名称="Chuck Norris"
;
字符串消息 = "I am "
+ 名称 + ", don't mess with a "ROCKSTAR"!"
;
您需要匹配所有非 "
的字符以及 \
+引号之间的任何字符的组合。
使用
"[^"\]*(?:\.[^"\]*)*"
也可以写成"(?:[^"\]|\.)*"
。它更容易阅读,但效率较低。
我发现了一个很好的实现方式,可以使用 YAML 匹配以运算符分隔的字符串以及匹配双引号字符串和一些附加功能。
@Wiktor Stribiżewv 的回答也解决了这个问题,但我找到了一个很好的实现:
- comment: strings in double quotes
name: string.quoted.double.hit
begin: \"
end: \"
patterns:
- comment: escape characters
name: constant.character.escape.hit
match: \.
- comment: special characters
name: constant.character.hit
match: \%.
这也匹配转义字符,如 \"
、\n
和特殊字符 %s
、%d