Ruby 雷格克斯和我一起?被动组中的量词?

Ruby 雷格克斯和我一起?被动组中的量词?,ruby,regex,oniguruma,Ruby,Regex,Oniguruma,我正在为SQL编辑TextMate语法。它当前有正则表达式(为了澄清,省略了关键字): 这与函数定义正确匹配,如 CREATE FUNCTION similarity 我想处理创建或替换,所以我将regex改为 (?i:^\s*(create(\s+or\s+replace)?)\s+(aggregate|function|(unique\s+)?index|table)\s+)(['"`]?)(\w+)\4 它与创建或创建或替换不匹配。我还通过将新的可选组设置为被动组来修复它: (?i:^

我正在为SQL编辑TextMate语法。它当前有正则表达式(为了澄清,省略了关键字):

这与函数定义正确匹配,如

CREATE FUNCTION similarity
我想处理
创建或替换
,所以我将regex改为

(?i:^\s*(create(\s+or\s+replace)?)\s+(aggregate|function|(unique\s+)?index|table)\s+)(['"`]?)(\w+)\4
它与
创建
创建或替换
不匹配。我还通过将新的可选组设置为被动组来修复它:

(?i:^\s*(create(?i:\s+or\s+replace)?)\s+(aggregate|function|(unique\s+)?index|table)\s+)(['"`]?)(\w+)\4
但是。。为什么它以前不匹配?我希望它匹配,但可能会给我一个我不期望的捕获组(如果外部被动组指示器没有向下延伸到新的内部组)。

这是您的\4--您需要在第一次添加新组时将其更改为\5

(?i:^\s*(create(?i:\s+or\s+replace)?)\s+(aggregate|function|(unique\s+)?index|table)\s+)(['"`]?)(\w+)\4