2009-10-13 61 views
2

我想用正則表達式從包含SQL語句的字符串中提取「綁定變量」參數。在Oracle中,參數以冒號爲前綴。提取以冒號開頭的所有單詞的正則表達式

例如,像這樣:

SELECT * FROM employee WHERE name = :variable1 OR empno = :variable2 

我可以使用正則表達式來提取字符串「變量1」和「變量2」?也就是說,獲取所有以冒號開頭並以空格,逗號或字符串結尾結尾的單詞。

(如果我多次得到相同的名稱,如果相同的變量在SQL語句中多次使用我不在乎,我以後可以排序了這一點。)

回答

3

爲了能夠自己處理這樣一個簡單的案例,你應該看看regex quickstart

對於同時使用:

:\w+ 
4

這可能會實現:

:\w+ 

這只是意味着「冒號,後跟一個或多個word-class characters」。

這顯然假定你有一個POSIX兼容的正則表達式系統,它支持單詞的語法。

當然,這隻能匹配一個這樣的參考。兩者都要,並跳過噪音,這樣的事情應該工作:

(:\w+).+(:\w+) 
1

如果您正則表達式解析器支持單詞邊界,

:[a-zA-Z_0-9]\b 
+0

':'已經是一個單詞邊界,所以你可以跳過第一個'\ B'。 – tangens 2009-10-13 08:16:48

+0

夠公平的,我會改變它。 – Blindy 2009-10-13 08:32:41

0

嘗試以下操作:

sed -e 's/[ ,]/\\n/g' yourFile.sql | grep '^:.*$' | sort | uniq 

假設你SQL位於名爲「yourFile.sql」的文件中。

這應該給出一個沒有重複的變量列表。

+0

非空間分隔符失敗。 – Blindy 2009-10-13 08:10:36

+0

已更新,以處理逗號。 Q指定空格,逗號或eol。所以現在應該覆蓋它。 – dave 2009-10-13 08:20:52

相關問題