我正在为Sublime文本编辑器(使用Oniguruma regex定义)编写一个语法高亮笔。基本上,我有这样的东西:
正则表达式:\((\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发布于 2014-03-06 01:55:21
正则表达式确保查找所有匹配项,而不仅仅是最后一项。
(?:\(at |(?!^)\G)(?:(?=(?:(?!\(at ).)*\))[^?\w])*?(?:(?<token1>\?\w+)|(?<token2>\w+))演示
http://regex101.com/r/rF8pM2
在您的示例中,您将?l和?x放在一个名为token1的命名捕获组中。可以使用命名捕获组token2访问object和location。
https://stackoverflow.com/questions/22202309
复制相似问题