2013-02-22 53 views
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) 

我试图找出一个正则表达式,让我本地列(商店编号,PRODUCT_ID和id_user)表(商店,产品和用户)和目标表列(如果FK3适用的话)。

如果我用下面的正则表达式:

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首先将前两个选项提供了一个有效的匹配,但相反,它执行作为第二个正则表达式。

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

回答

1

打破你的交替,这里就是你:

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

试试这个正则表达式来代替:

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