2013-02-22 3 views
0

Givin следующий текст:Чередование приоритета?

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) таблицы (магазин, продукт и пользователь) и столбец таблицы назначения (если применимо id в FK3).

Если я использую следующее регулярное выражение:

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

Это правильно соответствует первые два варианта.

Если я использую это регулярное выражение:

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

Это правильно соответствует FK3, но не Fk1 или ФК2. Я надеялся, что смогу совместить это с alteration. Я попытался следующие:

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

Если предположить, что, поскольку я кладу состояние 1 первое, что обеспечит правильный матч для первых двух вариантов, однако вместо этого он выступает в качестве второго регулярного выражения.

Любые предложения о том, как я могу это сделать правильно? Есть ли способ установить приоритет на альтернативе?

ответ

1

Ломая свое чередование, вот что вы получите:

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

Попробуйте это регулярное выражение вместо:

FOREIGN KEY \(([^)]+)\) REFERENCES ("[^"]+"|\([^)]+\)) 
Смежные вопросы