交替优先?

时间:2013-02-22 16:50:23

标签: regex

给予以下文字:

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+(\"[^\"]+\")

它恰当地匹配前两个选项。

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

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

它与FK3匹配,但不匹配FK1或FK2。我希望我可以将它与alteration结合起来。我尝试了以下方法:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

请尝试使用此正则表达式:

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