1

我正在为 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
4

1 回答 1

0

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

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

演示

http://regex101.com/r/rF8pM2

?l从您的示例中,您将?x在一个名为token1. object并且location可以使用命名的捕获组访问token2

于 2014-03-05T17:55:20.827 回答