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