2012-05-23 53 views
0

我有一個文件中定義看起來像存儲過程:正則表達式來捕獲存儲過程定義

CREATE  PROCEDURE [XXXX].[procedure_name_here] 

我的正則表達式到目前爲止是:

\.\[.*\]+.* 

參考:http://rubular.com/r/Z0FiI78bqF

我需要一些幫助,因爲它似乎不是100%正確的。

注:[xxxx]。部分可能存在也可能不存在(可選),但CREATE一詞必須存在,否則它將是另一個調用存儲過程的存儲過程,我只是在尋找實際的定義。

回答

2

如果你能依靠的程序名稱的點之後方括號之間,那麼你可以寫

\.\[(.*?)\] 

括號將捕獲的程序名稱字符串爲您服務。

如果點是可選的,或者您需要更多的驗證,該行是一個過程定義,然後用

CREATE\s+PROCEDURE\s+(?:\[.*?\]\.)?\[(.*?)\] 
-1

SQL是不是一個正規的語言。這意味着它無法正確解析正則表達式。爲SQL編寫正確的解析器當然是可能的,並且可以爲您關心的SQL子集編寫正確的解析器。但僅僅使用正則表達式是不可能的。

您可以使用正則表達式作爲猜測。但是,根據正則表達式的選擇,您將同時得到誤報,其中正則表達式表示某些文本在不是正確的時候是有效的SQL,而在正則表達式中表示某些文本實際上是無效的完全有效。

因此,您只需:爲SQL編寫正確的解析器,或者編寫一個可以猜出最佳值的正則表達式,並確保編寫了所有SQL文件以傳遞該正則表達式。

+0

我認爲你誤解了這個場景,我沒有解析sql的正確性,我只是簡單地提取某些存儲過程名稱。 – loyalflow