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