2015-01-10 2 views
1

Мне интересно, как я делаю файл .YAML-tmLanguage (для команд Minecraft), я хотел бы сделать код для тегов NBT. В настоящий момент он обнаруживает все команды, @a, @r, @p, @e, true, false, и любое количество.. Строки YAML-tmLanguage перекрывают друг друга

Так что мне интересно, как я могу сделать строки? В настоящее время это мой код:

- comment: String (single) 
    name: string.quoted.single.mcCmd 
    match: \'.*\' 
- comment: String (double) 
    name: string.quoted.double.mcCmd 
    match: \".*\" 

Это работает, когда у меня есть только один из обоих типов (одиночный/двойной) строки на одной строке. Например, при выполнении text:"Hello" будет сделан "Hello". Он также будет работать, если я сделаю text:"Hello",color:'blue', но если я попытаюсь сделать text:"Hello",color:"blue", он выделит "Hello",color:"blue" вместо "Hello" и "blue".

Итак, как я могу заставить код обнаруживать строки «открытия» и «закрытия»?


(Запуск Sublime Text 3, с установленным AAAPackageDev)

ответ

2

Вместо \'.*\', вы можете использовать: \'[^']*\' (а так же для двойных кавычек).

Проблема, с которой вы сталкиваетесь, заключается в том, что оператор regex * является «жадным» и будет потреблять столько символов, сколько может. Поэтому .* поглощает все, что есть между двумя кавычками!

Используя [^']*, хотя оператор по-прежнему «жадный», он не может пройти мимо закрывающей кавычки. (Если вы не знаете синтаксис, [^'] просто означает «not '».)

+0

Это похоже на работу. :) Кроме того, я думаю, что могу использовать значения «start» и «end» в моем коде. Но также приятно знать и чистое регулярное выражение.^_ ^ –

Смежные вопросы