正则表达式?被动组内的量词?

时间:2011-10-05 10:40:08

标签: ruby regex oniguruma

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

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

这正确匹配像

这样的函数定义
CREATE FUNCTION similarity

我想处理CREATE OR REPLACE,所以我将正则表达式更改为

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

它与CREATECREATE OR REPLACE不匹配。我通过使新的可选组也被动来修复它:

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

但是......之前为什么不匹配?我希望它能够匹配,但随后可能会给我一个我没想到的捕获组(如果外部被动组指示器没有流入新的内部组)。

1 个答案:

答案 0 :(得分:2)

这是你的\ 4 - 当你第一次添加新的parens时,你需要将它改为\ 5。