Oracle正則匹配相關函式簡解

2021-09-02 22:28:13 字數 2899 閱讀 1839

資料庫中關於正規表示式匹配的相關函式都是以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的值...