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)、表(商店、产品和用户)和目标表列(如果 FK3 中适用的 id)。

如果我使用以下正则表达式:

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

它正确匹配前两个选项。

如果我使用这个正则表达式:

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

它正确匹配 FK3,但不​​匹配 FK1 或 FK2。我希望我可以将它与alteration. 我尝试了以下方法:

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

假设因为我将状态 1 放在第一位,这将为前两个选项提供有效匹配,但是它作为第二个正则表达式执行。

关于如何正确执行此操作的任何建议?有没有办法设置交替的优先级?

4

1 回答 1

1

打破你的交替,这就是你得到的:

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

试试这个正则表达式:

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