背景:
对于Sublime Text中的语法高亮,
您可以使用相应的tmLanguage
文件编写tmTheme
文件。
tmLanguage
文件包含正则表达式,您可以在其中指定名称,
然后tmTheme
文件使用这些名称来设置捕获的样式。
我想根据前面有多少重复模式,对同一个模式进行不同颜色着色。或者,换句话说,我想以不同方式对每行上每个模式的第n个匹配进行设置。
问题:
所以例如,
如何编写3个正则表达式以匹配以下粗体组?
< foo> < bar>< baz>
< foo> < bar> < baz>
< foo>< bar> < baz>
任何事情都可以在< >
表达式1将捕获<*.?>
的第一个实例
表达式2将捕获<*.?>
的第二个实例
表达式3将捕获<*.?>
假设上面三个例子实际上是同一条线 我的目标是让每个组都有不同的颜色
<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
答案 0 :(得分:1)
您可以使用
(?m)^(?:<[^>]*>[[:blank:]]*){1}\K<[^>]*>
匹配第二个值。然后,只需递增1
即可获得更多值。
这是demo
thrid值将与(?m)^(?:<[^>]*>[[:blank:]]*){2}\K<[^>]*>
等匹配
答案 1 :(得分:0)