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

しかし..なぜ以前は一致しなかったのですか?私はそれが一致することを期待しますが、それから私が予期していなかったキャプチャグループを私に与える可能性があります(外側のパッシブグループインジケーターが新しい内側のグループに流れ落ちない場合)。

4

1 に答える 1

2

これは \4 でした。最初に新しい括弧を追加したときに、\5 に変更する必要がありました。

于 2011-10-05T10:50:21.227 に答える