4

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

它不会匹配 aCREATE或 a CREATE OR REPLACE。我也通过使新的可选组被动来修复它:

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

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

4

1 回答 1

2

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

于 2011-10-05T10:50:21.227 回答