【開發篇sql】 條件和表示式(八) 10g 正規表示式

yellowlee發表於2010-05-15

810g 正規表示式

很多時候需要對資料做處理,10g之前通常會自定義一些通用函式來實現一些規則,10g開始提供了幾個函式來支援正規表示式:

REGEXP_LIKE
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR

 

先來看看oracle10g正規表示式定義的運算子。

\       反斜槓有四個不同意義:取本身的值,引用下一個字元,介紹一個運算子,什麼也不做

示例:

SQL> select * from dual where  regexp_like('aa111b','\^') ;

 

DUMMY

-----

 

SQL> select * from dual where  regexp_like('aa11^1b','\^') ;

 

DUMMY

-----

X

SQL> select * from dual where  regexp_like('aa11^1b','\a') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','\aa1') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','\aa2') ;

 

DUMMY

-----

 

SQL> select * from dual where  regexp_like('aa11^1b','\') ;

 

DUMMY

-----

X

*       匹配0個或者多個表示式

SQL> select * from dual where  regexp_like('aa11^1b','*') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','a*1') ;

 

DUMMY

-----

X

+       匹配一個或者多個表示式

SQL> select * from dual where  regexp_like('aa11^1b','a*1+1*1') ;

 

DUMMY

-----

X

?       匹配0個或者一個表示式

SQL> select * from dual where  regexp_like('aa11^1b','?b') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','?bb') ;

 

DUMMY

-----

 

SQL> select * from dual where  regexp_like('aa11^1b','?a1') ;

 

DUMMY

-----

X

|       指兩項之中的選擇

SQL> select * from dual where  regexp_like('aa11^1b','?a1|?bb') ;

 

DUMMY

-----

X

^       匹配開頭的字元

SQL> select * from dual where  regexp_like('aa11^1b','^aa1') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','^aa2') ;

 

DUMMY

-----

 

$       匹配結尾的字元

SQL> select * from dual where  regexp_like('aa11^1b','1b$') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','11b$') ;

 

DUMMY

-----

 

SQL> select * from dual where  regexp_like('aa11^1b','a11$') ;

 

DUMMY

-----

 

.       匹配任何字元除了null

SQL> select * from dual where  regexp_like('aa11^1b','\^1.$') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','\^.$') ;

 

DUMMY

-----

[]      括號表示式

SQL> select * from dual where  regexp_like('aa11^1b','[\^.$]+[\^1.$]') ;

 

DUMMY

-----

X

()      子表示式的開始和結尾

SQL> select * from dual where  regexp_like('aa11^1b','(^a)+([\^.$]+[\^1.$])') ;

 

DUMMY

-----

 

SQL> select * from dual where  regexp_like('aa11^1b','(^a)+(.)+([\^.$]+[\^1.$])') ;

 

DUMMY

-----

X

 

SQL> select * from dual where  regexp_like('aa11^1b','(^a)+|([\^.$]+[\^1.$])') ;

 

DUMMY

-----

X

 

{m}     精確的匹配次數

{m,}    至少m次匹配

{m,n}   mn次匹配

SQL> Select REGEXP_REPLACE('aabbcc','(aa){1}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(AA){

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

xxbbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(aa){1,}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(AA){

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

xxbbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(a){1,}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(A){1

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

xxbbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(a){2,}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(A){2

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

xxbbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(ab){2,}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(AB){

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

aabbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(ab){1,}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(AB){

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

axxbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(a){1,2}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(A){1

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

xxbbcc

 

SQL> Select REGEXP_REPLACE('aabbcc','(ab){1,2}', 'xx') FROM dual;

 

REGEXP_REPLACE('AABBCC','(AB){

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

axxbcc

(待續)

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

相關文章