oracle 正規表示式用法

2021-08-31 15:26:18 字數 4523 閱讀 2524

l

方括號表達示

方括號表示式

描述

[[: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

示例3

sql> 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 from emp where regexp_like(job, '(clerk|analyst)', 'i');

ename job

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

smith clerk

scott analyst

adams clerk

james clerk

ford analyst

miller clerk

Oracle正規表示式的用法

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

oracle正規表示式的用法

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

Oracle正規表示式的用法

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