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

내가 나에게 로컬 열 (STORE_ID, PRODUCT_ID 및 id_user) 테이블 (저장소, 제품 및 사용자)와 목표 테이블 컬럼을 제공하는 정규 표현식을 알아 내려고 노력하고 있어요 (해당되는 경우 FK3의 id).

나는 다음과 같은 정규식 사용하는 경우 : 그것은 제대로 처음 두 옵션과 일치

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

합니다. 그것은 제대로 FK3하지만 FK1 또는 FK2 일치

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

:이 정규식을 사용하는 경우

. 나는 이것을 alteration과 결합 할 수 있기를 바랬습니다. , 내가 처음 상태 1을 넣어 때문 처음 두 옵션에 대한 유효한 일치를 제공 할 수 있다고 가정

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

그러나 대신 두 번째 정규식으로 수행 : 나는 다음 시도했다.

어떻게하면 제대로 할 수 있습니까? Alternation에 우선 순위를 설정하는 방법이 있습니까?

답변

1

당신의 교대를 깨고, 여기 당신이 무엇을 얻을 :

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

대신이 정규식을 시도해보십시오

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