0

次のテキストをギビンします。

constraint FK1 foreign key (Store_id) references "Store",
constraint FK2 foreign key (Product_id) references "Product"),
CONSTRAINT PK1 PRIMARY KEY (id),
CONSTRAINT FK3 FOREIGN KEY (id_user) REFERENCES user(id)

ローカル列(Store_id、Product_id、id_user)、テーブル(Store、Product、User)とターゲットテーブル列(該当する場合はFK3のid)を提供する正規表現を見つけようとしています。

次の正規表現を使用する場合:

FOREIGN\s+KEY\s+?\(([^(]+)\)\s+?REFERENCES\s+(\"[^\"]+\")

最初の2つのオプションと適切に一致します。

この正規表現を使用する場合:

FOREIGN\s+KEY\s+?\(([^(]+)\)\s+?REFERENCES\s+([^(]+)\(([^)]+)

FK3と適切に一致しますが、FK1またはFK2とは一致しません。これをと組み合わせることができると思っていましたalteration。私は次のことを試しました:

FOREIGN\s+KEY\s+?\(([^(]+)\)\s+?REFERENCES\s+((\"[^\"]+\")|[^(]+)\(([^)]+)

状態1を最初に配置したため、最初の2つのオプションに有効な一致が提供されると仮定しますが、代わりに2番目の正規表現として機能します。

これを適切に行う方法について何か提案はありますか?交代に優先順位を設定する方法はありますか?

4

1 に答える 1

1

あなたの交代を分解して、これがあなたが得るものです:

\s+(
    ("[^"]+")
    |
    [^(]+
)
\( ([^)]+)

代わりにこの正規表現を試してください:

FOREIGN KEY \(([^)]+)\) REFERENCES ("[^"]+"|\([^)]+\))
于 2013-02-22T16:56:03.493 に答える