Как сопоставить разделенные оператором строки в 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
Вы должны соответствовать всем персонажам, которые не являются "
а также комбинации \
+ что-нибудь между кавычками.
использование
"[^"\\]*(?:\\.[^"\\]*)*"
Смотрите это регулярное выражение
Это также можно записать как "(?:[^"\\]|\\.)*"
, Это легче читать, но менее эффективно.