Как сопоставить разделенные оператором строки в Sublime Development Development YAML tmlanguage

Я делаю определение синтаксиса для пользовательского языка в возвышенном тексте 2, используя PackageDevelopment .YAML-tmLanguage. Сейчас я хочу, чтобы мой синтаксис идентифицировал строки, не являющиеся строками.

пример строки кода:

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"!";

2 ответа

Решение

Я обнаружил хорошую реализацию того, как сопоставлять строки, разделенные оператором, а также сопоставлять строки в двойных кавычках и некоторые дополнительные функции с использованием 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: \%.

это также соответствует escape-символам, таким как \", \n и специальные символы %s, %d

Вы должны соответствовать всем персонажам, которые не являются " а также комбинации \+ что-нибудь между кавычками.

использование

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

Смотрите это регулярное выражение

Это также можно записать как "(?:[^"\\]|\\.)*", Это легче читать, но менее эффективно.

Другие вопросы по тегам