我正在编辑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
它与CREATE
或CREATE OR REPLACE
不匹配。我通过使新的可选组也被动来修复它:
(?i:^\s*(create(?i:\s+or\s+replace)?)\s+(aggregate|function|(unique\s+)?index|table)\s+)(['"`]?)(\w+)\4
但是......之前为什么不匹配?我希望它能够匹配,但随后可能会给我一个我没想到的捕获组(如果外部被动组指示器没有流入新的内部组)。
答案 0 :(得分:2)
这是你的\ 4 - 当你第一次添加新的parens时,你需要将它改为\ 5。