背景:
对于Sublime Text中的语法突出显示,
您可以使用相应的tmTheme文件编写tmLanguage
文件。
< code>tmLanguage文件包含正则表达式,您可以在其中指定名称,< br >然后< code>tmTheme文件使用这些名称来设置所捕获内容的样式。
我想根据之前出现的重复图案的数量,对同一图案进行不同的着色。或者,换一种说法,我想对每一行上每个图案的第n个匹配进行不同的样式设置。
问题:
例如,
如何编写 3 个正则表达式来匹配以下粗体组?
任何东西都可能在里面
表达式 1 将捕获
假设上面三个例子实际上是同一行。< br >我的目标是让每组都有不同的颜色
<this would be red> <this would be orange> <this would be yellow> <etc..>
正则表达式语言是Oniguruma。
我迄今为止的尝试:
我可以像这样捕捉第一组:
^<.*?>
我找不到如何只捕获第二组
^<.*?>{2} captures nothing
<.*?>{2} captures nothing
<.*?>{2,} captures nothing
^(?:<.*?>)<.*?> captures 1st and 2nd
^(?!<.*?>)<.*?> captures nothing
^(?=<.*?>)(<.*?>) captures 1st
^(?=<.*?>)(<.*?>){1} captures 1st
^(?=<.*?>)(<.*?>){2} captures 1st and 2nd
(?=<.*?>)(<.*?>) captures everything
您可以使用
(?m)^(?:<[^>]*>[[:blank:]]*){1}\K<[^>]*>
匹配第二个值。然后,只需增加< code>1即可获得更多的值。
这是一个演示
第三个值将与(?m)^(?:
您可以:
(?:(?:\s*<\s*(?!TGT)\w+\s*>\s*)*(<\s*TGT\s*>)){N}
其中TGT
是您寻找的,N
是匹配项。
演示(在3个版本中循环,查看所有示例...)
好的,你可以这样做:
/^((<[^>]*>){N-1})((<[^>]*>))/gm
其中N
是您寻找的那个。
演示