Oniguruma Regex - 匹配整个组内容,而不仅仅是最后一次出现

时间:2014-03-05 15:42:08

标签: regex sublimetext2 oniguruma

我正在为Sublime Text编辑器(使用Oniguruma正则表达式定义)编写语法高亮显示器。基本上,我有这样的事情:

正则表达式: \((\w+\s*)*\)

测试: (how are you)

捕获团体: 1. you

我的问题是,只有捕获组中的最后一个匹配(因此突出显示)而不是捕获组的整个内容。

在我的具体案例中:

正则表达式: \(\w+(\s+(\?\w+\s+)+-\s+(\w+))*\)

测试: (at ?l - location ?x - object)

捕获小组:

1. ?x - object
2. ?x
3. object

但是,我想匹配整个群组内容,例如:

1. ?x - object AND ?l - location
2. ?x AND ?l
3. object AND location

1 个答案:

答案 0 :(得分:0)

正则表达式确保找到所有出现的事件,而不仅仅是最后一次出现。

(?:\(at |(?!^)\G)(?:(?=(?:(?!\(at ).)*\))[^?\w])*?(?:(?<token1>\?\w+)|(?<token2>\w+))

演示

http://regex101.com/r/rF8pM2

在您的示例中,您的遗嘱?l?x位于名为token1的命名捕获组中。 可以使用指定的捕获组object访问locationtoken2