regex - 如何使用正则表达式捕获每行的第 n 个模式?

标签 regex syntax-highlighting sublimetext3 oniguruma

背景:

用于 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/

相关文章:

c# - 是否可以将正则表达式与 .net 中的二进制数据进行匹配?

macros - OpenOffice 语法高亮

delphi - Delphi,从[Uni] SynEdit切换到SyntaxMemo SDK

mysql - 查找和替换字符的想法

JavaScript 匹配 RegExp 后的子串

regex - 在 greylog 搜索中尝试正则表达式模式

c++ - Xcode 8.3.3 C++ 中的错误语法突出显示

git - 有没有办法恢复 sublime text 3 中被 git checkout 覆盖的工作目录中的文件?

ruby-on-rails - 如何为 Sublime Text 3 设置 Ctags

javascript - 崇高文本3 : Color coding removed for javascript