背景:
用于 Sublime Text 中的语法高亮,
你可以写一个tmLanguage
具有相应 tmTheme
的文件文件。
tmLanguage
文件包含您在其中命名的正则表达式,
然后是 tmTheme
文件使用这些名称来设置捕获内容的样式。
我想根据之前出现的重复图案的数量,对相同的图案进行不同的着色。或者,换句话说,我想对每行中每个模式的第 n 个匹配项设置不同的样式。
问题:
例如,
如何编写 3 个正则表达式来匹配以下粗体组?
任何东西都可以在 < > 中。
表达式 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
最佳答案
你可以使用
(?m)^(?:<[^>]*>[[:blank:]]*){1}\K<[^>]*>
要匹配第二个值。然后,只需增加 1
以获得更多值(value)。
这是一个demo
第三个值将与 (?m)^(?:<[^>]*>[[:blank:]]*){2}\K<[^>]*>
匹配等
关于regex - 如何使用正则表达式捕获每行的第 n 个模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494443/