Oracle正規表示式(regular expression)

keeptrying發表於2012-07-05

元字元

字元含義

舉例說明

^

匹配字串的開始位置([]中使用,此時它表示不接受該字符集合。

^a:匹配以a開始的字串

[^a]:匹配不含a的字串

-

當使用在a-m表示範圍;

當使用在第一個字元時表示

連字串,如[-abc]

$

匹配字元結束位置

‘a$’:匹配以a結束的字串

.

匹配除換行符 n之外的任何單字元。

?

匹配前面的子表示式零次或一次

tr(y(ing)?):可以表示try或者trying

*

匹配前面的子表示式零次或多次

+

匹配前面的子表示式一次或多次

()

標記一個子表示式的開始和結束位置

a(b)*可以匹配

ab,abb,abbb,youabb

(c|d)匹配cd

[]

標記一箇中括號表示式

[cd]匹配選擇cd等同於

(c|d)。匹配的是單字元,[^cd]是匹配c,d之外的單字元。

[a-z]表示所有小寫字母

{m,n}

m= <出現次數 <=n'{m}'表示出現m次,'{m,}'表示至少出現m次。

|

表示或者的關係。指明兩項之間的一個選擇

 

 

 

 

字元簇

字元含義

[[:alnum:]]

字母和數字混合的字元

[[:alpha:]]

字母字元

[[:cntrl:]]

控制字元

[[:digit:]]

數字字元

[[:graph:]]

影像字元

[[:lower:]]

小寫字母字元

[[:print:]]

列印字元

[[:punct]]

標點符號字元

 

 

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 code

80831 is for falcon, co',

'[[:alpha:]]{3,}', 1, 3)

from dual;

結果選擇的是code而非Thezip

REGEXP_INSTR

REGEXP_INSTR

(source_string,

pattern

[,start_position

[,occurrence

[,return_option

[,match_parameter]]]]

)

start_position

開始搜尋位置

Occurrence

n次出現pattern,預設為1

return_option

0pattern的起始位置

1pattern下一個字元起始位置

預設為0

REGEXP_COUNT

REGEXP_COUNT

(source_string,

pattern

[[,start_position]

[,match_parameter]])

11g新增的函式,表示pattern在原字串中出現的次數

start_position

開始搜尋的位置

 

 

 

Oracle支援正規表示式函式舉例:

 

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

 

 

 

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

相關文章