Oracle正規表示式的用法

dupeng457發表於2010-12-24

Oracle正規表示式的用法

l 方括號表達示

方括號表示式

描述

[[:alnum:]]

字母和數字混合的字元

[[:alpha:]]

字母字元

[[:cntrl:]]

控制字元

[[:digit:]]

數字字元

[[:graph:]]

影像字元

[[:lower:]]

小寫字母字元

[[:print:]]

列印字元

[[:punct]]

標點符號字元

[[:space:]]

空格字元

[[:upper:]]

大寫字母字元

[[:xdigit:]]

十六進位制數字字元

l 元字元

元字元

描述

*

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

+

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

{m}

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

{n}?

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

{m,}

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

{n,}?

匹配前面的字串至少n

{m,n}

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

{n,m}

匹配前面的字串至少到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指定了在字串中的準確位置,預設值為1Occurrence是一個選項,指定在源字串匹配過程中相對其他字串,哪個字串應該匹配。最後,match_parameter也是一個選項,指定在匹配時是否區分大水寫。

示例1

SQL> select regexp_substr('The zip code 80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;

REGEXP_SUBSTR

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

80831

示例2

SQL> select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;

REGEXP_SUBSTR

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

code

示例3

SQL> select regexp_substr('comments or questions - email feedback@plsqlbook.com', '[[:alnum:]](([_.-+]?[[:alnum:]]+)*)@' ||

2 '([[:alnum:]]+)(([.-]?[[:alnum:]]+)*).([[:alpha:]]{2,})') REGEXP_SUBSTR

3 from dual;

REGEXP_SUBSTR

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

feedback@plsqlbook.com

b) REGEXP_INSTR

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

SQL> select regexp_instr('The zip code 80831 is for falcon, co', '[[:digit:]]{5}') REGEXP_INSTR from dual;

REGEXP_INSTR

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

14

c) REGEXP_REPLACE

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

如電話號碼的格式為:719-111-1111。使用REGEX_REPLACER的返回值是:

SQL> select regexp_replace('Reformat the phone number 719-111-1111 ...',

2 '[1]?[-.]?((?[[:digit:]]{3})?)+[- .]?'

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

4 ' (1) 2-3') regexp_replace

5 from dual;

REGEXP_REPLACE

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

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

S

d) 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

轉自:http://space.itpub.net/20948385/viewspace-665735

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/658202/viewspace-1043579/,如需轉載,請註明出處,否則將追究法律責任。

相關文章