.YAML-tmLanguage字符串相互重叠

.YAML-tmLanguage strings overlap each other

我想知道,因为我正在制作一个 .YAML-tmLanguage 文件(用于 Minecraft 命令),所以我想为 NBT 标签制作一些代码。目前它检测到所有命令,@a@r@p@etruefalse 和任何数字。

所以我想知道,我将如何制作字符串?目前这是我的代码:

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

当我在一行中只有任一类型 (single/double) 的字符串时,这会起作用。例如,执行 text:"Hello" 将使 "Hello" 突出显示。如果我执行 text:"Hello",color:'blue',它也会起作用,但如果我尝试执行 text:"Hello",color:"blue",它会突出显示 "Hello",color:"blue",而不仅仅是 "Hello""blue"

那么我如何让代码检测到 "opening" 和 "closing" 字符串?


(运行 Sublime Text 3,安装了 AAAPackageDev)

代替\'.*\',您可以使用:\'[^']*\'(双引号也类似)。

您遇到的问题是正则表达式 * 运算符是 "greedy",并且会尽可能多地使用字符。因此,.* 吞没了两个引号之间的所有内容!

使用[^']*,虽然运算符还是"greedy",但是不能超过右引号。 (如果您不知道语法,[^'] 就意味着“not '”。)