oracle正規表示式的用法

2021-08-27 15:27:26 字數 3599 閱讀 5792

方括號表達示

方括號表示式

描述[[:alnum:]]

字母和數字混合的字元

[[:alpha:]]

字母字元

[[:cntrl:]]

控制字元

[[:digit:]]

數字字元

[[:graph:]]

影象字元

[[:lower:]]

小寫字母字元

[[:print:]]

列印字元

[[:punct:]]

標點符號字元

[:space:]

空格字元

[[:upper:]]

大寫字母字元

[[:xdigit:]]

十六進製制數字字元

l 元字元

元字元描述

*?如果有前面字串的0次以上出現時匹配

+?如果有前面字串的1次以上出現時匹配

m是整數。它文字中找出給定子表示式的恰好m次出現

?前面的字串只出現一次時匹配

m是整數。它在文字中找出給定子表達示的至少m次出現

?匹配前面的字串至少n次

m和n是整數。它在文字中找出給定子表達示的m到n次出現

匹配前面的字串至少到n次,但不多於m次

c查詢操作區分大小寫

i查詢操作不區分大水寫

m多行字串上的查詢,在源字串包含多行時,該查詢允許用(^)模式匹配字串的開始

n通常匹配單個字元,也可以匹配新行

x需要忽略正則表達示中的空格字元時,使用引數『x』

\a匹配字串首,而不是行首,因而多行字串不能匹配每一行

\d匹配任意數字字元

\d匹配任意非數字字元

\s匹配任意空格字元

\s匹配任意非空格字元

\w匹配任意字元和數字。該字元和[:alnum:]之間的不同是\w包括下劃線字元

\w匹配任意非空字串

*萬用字元。找出在文字中包含0或多次給定子表示式出現的記錄

+找出在文字中包含1或多次給定子表示式出現的記錄

?找出在文字中包含0次或1次給定子表達示出現的記錄

.匹配文字中的任意字元

^錨。如果該字元後的表示式出現在行首,則匹配成功

$錨。如果該字元後的表示式出現在行首,則匹配成功

|分隔符,使用方法和or相同

(….)

分組子表示式

l 正規表示式運算子和函式

a) regexp_substr

regexp_substr為指定字串的一部分與正規表示式建立匹配。語法如下:

regexp_substr(source_string,

pattern,

start_position,

occurrence,

match_parameter)

其中source_string是必須的。可以是帶引號的字串或者變數。pattern是用單引號引用的與正規表示式。start_position指定了在字串中的準確位置,預設值為1。occurrence是乙個選項,指定在源字串匹配過程中相對其他字串,哪個字串應該匹配。最後,match_parameter也是乙個選項,指定在匹配時是否區分大水寫。

示例1:

sql> select regexp_substr('the zip code 80831 is for falcon, co','[[:digit:]]' ) regexp_substr from dual;

regexp_substr

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

80831

示例2:

sql> select regexp_substr('the zip code 80831 is for falcon, co', '[:alpha:]', 1, 3) regexp_substr from dual;

regexp_substr

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

code

示例3sql> select regexp_substr('comments or questions - email [email protected]', '[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||

2 '([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]])') regexp_substr

3 from dual;

regexp_substr

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

[email protected]

b) regexp_instr

regexp_instr返回與正規表示式匹配的字元和字串的位置。如

sql> select regexp_instr('the zip code 80831 is for falcon, co', '[[:digit:]]') regexp_instr from dual;

regexp_instr

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

14c) regexp_replace

regexp_replace與replace函式類似,提供一種修改與所給正規表示式匹配的字串的方法。作用包括糾正拼寫錯誤、格式化輸入輸出的文字。

如**號碼的格式為:719-111-1111。使用regex_replacer的返回值是:

sql> select regexp_replace('reformat the phone number 719-111-1111 ...',

2 '[1]?[-.]?(\(?[[:digit:]]\)?)+[- .]?'

3 || '([[:digit:]])[- .]?([[:digit:]])',

4 ' (\1) \2-\3') regexp_replace

5 from dual;

regexp_replace

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

reformat the phone number (719) 111-1111 ...

sd) regexp_like

regexp_like運算子與like運算子相似,但是功能更強大,因為它支援使用與此正規表示式與文字進行匹配。語法如下:

regexp_like(source_string, pattern, match_parameter)

source_string可以是文字字串,如果前面例中的字串,也可以是包含某些字串的變數或列。pattern是要進行匹配的正規表示式。match_parameter用於指定在匹配時是否區分大小寫。

sql> select ename, job

2 from emp

3 where regexp_like(job, '(clerk|analyst)', 'i');

ename job

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

smith clerk

scott analyst

adams clerk

james clerk

ford analyst

miller clerk

不過regexp_like這種方式也有缺陷,字串限制在4000個字元,並且要寫在一行,否則查不出換行的符合條件的。

oracle 正規表示式用法

l 方括號表達示 方括號表示式 描述 alnum 字母和數字混合的字元 alpha 字母字元 cntrl 控制字元 digit 數字字元 graph 影象字元 lower 小寫字母字元 print 列印字元 punct 標點符號字元 space 空格字元 upper 大寫字母字元 xdigit 十六...

Oracle正規表示式的用法

l 方括號表達示 方括號表示式 描述 alnum 字母和數字混合的字元 alpha 字母字元 cntrl 控制字元 digit 數字字元 graph 影象字元 lower 小寫字母字元 print 列印字元 punct 標點符號字元 space 空格字元 upper 大寫字母字元 xdigit 十六...

Oracle正規表示式的用法

l 方括號表達示 方括號表示式 描述 alnum 字母和數字混合的字元 alpha 字母字元 cntrl 控制字元 digit 數字字元 graph 影象字元 lower 小寫字母字元 print 列印字元 punct 標點符號字元 space 空格字元 upper 大寫字母字元 xdigit 十六...