0
我在文件中有以下SQL文本。目標是從文件中識別數據庫表名。下面只是一個通用的例子,我正在尋找一個通用的解決方案,無論是在C#或Perl。我沒有做很多的正則表達式的,因此,如果有人給我一開始複雜正則表達式C#或perl
select
a.xyz,
b.xyz,c.xyz,
d.xyz
from db1.test1 a
inner join db2.test2 b
on a.xyz = b.xyz
inner join
(
select a.xyz
from db1.test3) as c
on a.xyz=c.xyz
left outer join db1.test4 d
on c.xyz = d.xyz
所以基本上,我需要自動找出在SQL中的所有表的名字,我將不勝感激。在這種情況下,測試1,測試2,測試3和測試4
我知道該模式是表名前面是「from」,「內部連接」,「左外連接」,然後數據庫名稱(如db1, db2等),然後是文字'。'和表名。
感謝Tim,我可能會遇到另一種模式,例如,我可以使用類似於「from db1.test5,db1.test6」 這樣的模式。在這種情況下,我想捕獲但test5和test6。但是我看到我可以捕獲test5(基於上面的代碼)。有什麼辦法可以同時匹配test5和test6 – bcd 2013-02-13 00:59:27
+1,但是你應該使用'Groups [「table」]'而不是'Groups [2]'。爲了明白爲什麼,把它添加到你的正則表達式的末尾:'(?:\ s +(\ w +))?'。您應該發現'Group [2]'現在包含表別名('a','b'或'd'),'Groups [「table」]'與Groups [3]'相同。在同一個正則表達式中使用命名組和編號組絕不是一個好主意。實際上,如果您使用命名組,則應將ExplicitCapture標誌設置爲禁用編號組。 – 2013-02-13 01:08:32