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

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

它不能匹配CREATECREATE OR REPLACE。我通过将新的可选组也设为被动来修复它:

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

但是为什么之前没有匹配成功呢?我本来以为会匹配成功,但是可能会给我一个意料之外的捕获组(如果外部被动组指示器没有继续传递到新的内部组)。

1个回答

2

当您第一次添加新的括号时,\4 是您需要更改为 \5 的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接