【发布时间】:2011-10-05 10:40:08
【问题描述】:
我正在为 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
但是..为什么以前不匹配?我希望它能够匹配,但随后可能会给我一个我没有预料到的捕获组(如果外部被动组指示符没有渗透到新的内部组)。
【问题讨论】: