1. 程式人生 > >Oracle正則表示式函式

Oracle正則表示式函式

Oracle支援正則表示式函式舉例。

Regexp_substr:用來提取一個字串的一部分。

Regexp_substr('first filed, second filed, thirdfiled', [^,]*,')

Pattern為', [^,]*,'表示以,開始逗號,中間空一個格,連續0或多個非逗號字元,最後還是逗號,這樣,返回則為', second filed,'。

-------------------------------------------------------------------------------

Regexp_instr:用來pattern的起始位置。

如有一組地址,返回郵編的位置

regexp_instr('Jone Smith,10045 Berry Lane,SanJoseph,CA

91234-1234','[[:digit:]]{5}([-[[:digit:]]{4}])?$')

顯然結果位置是91234-1234對應的起始位置。

-------------------------------------------------------------------------------

Regexp_replace:用來將pattern替換成需要替換的字串,相比傳統的replace函式,該函式相比較靈活。例如:

'Jone   smith'中有三個空格,而'Jone  smith'有2個空格,要將中間的空格改為一個空格,使用replace就要使用2次,而是用正則表示式,我們就就可以將pattern設計為

'( ){2,}'這樣

regexp_replace(mc,'( ){2,}',' ')

-------------------------------------------------------------------------------

regexp_like是增強版的like,可以包含_和%萬用字元,使用在where條件中。

正則表示式特性---後向引用

通過將自表示式匹配的內容快取到緩衝區中,從左相右進行編號,以/digit(digit為1-9)。而子表示式用圓括號表示。

1.在regexp_replace中應用:

將字串'aa bb cc'反寫成'cc bb aa'則可以設計如下:

regexp_replace('aa bbcc','(.*) (.*) (.*)','\3 \2 \1')

(.*)則表示任何一個字串組合,三個這樣的組合用空格隔開,與源字串吻合,\1,\2,\3則分別儲存了三個字表達式的值,這樣我們就可以使用這個達到目的。

2.在regexp_substr中應用:

查詢被空格隔開的重複字母數字值

regexp_substr('the finaltest is is the implention',([[:alnum:]]+)([[:space:]]+)\1')

返回結果為is is 。([[:alnum:]]+)([[:space:]]+)返回很多字串,但是增加一個\1就表示連續返回兩個同樣字串,這樣就把重複