我正在为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
答案 0 :(得分:0)
正则表达式确保找到所有出现的事件,而不仅仅是最后一次出现。
(?:\(at |(?!^)\G)(?:(?=(?:(?!\(at ).)*\))[^?\w])*?(?:(?<token1>\?\w+)|(?<token2>\w+))
在您的示例中,您的遗嘱?l
和?x
位于名为token1
的命名捕获组中。
可以使用指定的捕获组object
访问location
和token2
。