0

我正在使用 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"!";

4

2 回答 2

1

您需要匹配所有不是的字符以及引号之间的 +anything"组合。\

利用

"[^"\\]*(?:\\.[^"\\]*)*"

请参阅此正则表达式演示

也可以写成"(?:[^"\\]|\\.)*"。它更容易阅读,但效率较低。

于 2016-04-18T05:30:54.627 回答
1

我发现了一个关于如何匹配运算符分隔的字符串以及匹配双引号字符串和使用 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

于 2016-04-18T06:11:41.003 回答