資料庫中關於正規表示式匹配的相關函式都是以regexp開頭,oracle支援正規表示式的內建函式如下:
名稱語法
備註regexp_like
regexp_like
(source_string,
pattern
[, match_parameter]
source_string:源字串
pattern:正規表示式
match_parameter:匹配模式(i:不區分大小寫;c:區分大小寫;n:允許使用可以匹配任意字串的操作符;m:將x作為乙個包含多行的字串。
regexp_replace
regexp_replace
(source_string,
pattern
[,replace_string]
[,position]
[,occurtence]
[,match_parameter]
replace_string:用於替換的字串
position:開始搜尋的起始位置
occurtence指定替換第n次出現字串
其他同上。
regexp_substr
regexp_substr
(source_string, pattern
[,position
[,occurrence
[,match_parameter]]]
position:指定在字串中準確位置,即開始匹配的字元的位置,預設為1
occurrence:指定在源字串匹配過程中相對其他字串,哪個字串應該匹配。例如
select regexp_substr('the zip code80831 is for falcon, co',
'[[:alpha:]]',
1,3)
from dual;
結果選擇的是code而非the或zip。
select regexp_substr('the zip code80831 is for falcon, co',
'[[:alpha:]]',
11,//表示從第11個字元(code的d字元)開始
1)//查詢到第乙個匹配的就是for了,第二個匹配的是falcon
from dual;
結果是for
regexp_instr
regexp_instr
(source_string,
pattern
[,start_position
[,occurrence
[,return_option
[,match_parameter]]]]
start_position:
開始搜尋位置
occurrence:
第n次出現pattern,預設為1
return_option:
0:pattern的起始位置
預設為0
regexp_count
regexp_count
(source_string,
pattern
[[,start_position]
[,match_parameter]])
11g新增的函式,表示pattern在原字串中出現的次數
start_position:
開始搜尋的位置
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:]]([-[[:digit:]]])?$')
顯然結果位置是91234-1234對應的起始位置。
regexp_replace:用來將pattern替換成需要替換的字串,相比傳統的replace函式,該函式相比較靈活。例如:
'jone smith'中有三個空格,而'jone smith'有2個空格,要將中間的空格改為乙個空格,使用replace就要使用2次,而是用正規表示式,我們就就可以將pattern設計為
'( )'這樣
regexp_replace(mc,'( )',' ')
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則分別儲存了三個字表示式的值,這樣我們就可以使用這個達到目的。
regexp_count是增強版的count,這個非常簡單,用來計算匹配字元的個數,利用這個函式,在不知道匹配字串數量的前提下,我們可以非常方便的取到匹配到最後位置的值。
oracle正則匹配查詢
regexp like 3個引數 第乙個是輸入的字串 第二個是正規表示式 第三個是取值範圍 i 大小寫不敏感 c 大小寫敏感 n 點號 不匹配換行符號 m 多行模式 x 擴充套件模式,忽略正規表示式中的空白字元。全部測試資料 sql select from test reg like aabc a1...
oracle正則函式
值描述 匹配乙個字串的開始。如果與 m 的match parameter一起使用,則匹配表示式中任何位置的行的開頭。匹配字串的結尾。如果與 m 的match parameter一起使用,則匹配表示式中任何位置的行的末尾。匹配零個或多個。匹配乙個或多個出現。匹配零次或一次出現。匹配任何字元,除了空。用...
oracle函式相關
1.nvl oracle的nvl函式的用法 通過查詢獲得某個欄位的合計值,如果這個值位null將給出乙個預設的預設值 select nvl sum t.dwxhl 1 from tb jhde t where zydm 1 這裡關心的nvl的用法,nvl arg,value 代表如果前面的arg的值...