Oracle
正則表達式有幾個優點優於常見的LIKE操作符和INSTR
元字符(Meta Character)
Sql代碼
^ 使表達式定位至一行的開頭
$ 使表達式定位至一行的末尾
* 匹配
? 匹配
+ 匹配
{m} 正好匹配 m 次
{m
{m
[:alpha:] 字母字符
[:lower:] 小寫字母字符
[:upper:] 大寫字母字符
[:digit:] 數字
[:alnum:] 字母數字字符
[:space:] 空白字符(禁止打印)
[:cntrl:] 控制字符(禁止打印)
[:print:] 可打印字符 | 分隔替換選項
( ) 將子表達式分組為一個替換單元
[char] 字符列表
Oracle
Sql代碼
REGEXP_LIKE
(srcstr
REGEXP_INSTR
(srcstr
REGEXP_SUBSTR
(srcstr
REGEXP_REPLACE
(srcstr
Sql代碼
srcstr: 被查找的字符數據
pattern: 正則表達式
occurrence: 出現的次數
position: 開始位置
return_option: 默認值為
replacestr: 用來替換匹配模式的字符串
match_option: 匹配方式選項
c
I
n
m
下面通過一些具體的例子來說明如何使用這四個函數
Sql代碼
SQL> create table person (
Table created
SQL> insert into person values (
SQL> insert into person values (
SQL> commit;
Commit complete
SQL> select * from person;
FIRST_NAME LAST_NAME EMAIL ZIP
Steven Chen
James Li
Sql代碼
SQL> select zip as invalid_zip from person where regexp_like(zip
INVALID_ZIP
SQL> select first_name from person where regexp_like(first_name
FIRST_NAME
Steven
SQL> select first_name from person where regexp_like(first_name
no rows selected
SQL> select first_name from person where regexp_like(first_name
no rows selected
SQL> select first_name from person where regexp_like(first_name
FIRST_NAME
Steven
SQL> select email from person where regexp_like(email
no rows selected
SQL> select email from person where regexp_like(email
SQL> select email from person where regexp_like(email
no rows selected
SQL> select email from person where regexp_like(email
Sql代碼
查找zip中第一個非數字字符的位置
SQL> select regexp_instr(zip
POSITION
從第三個字符開始
SQL> select regexp_instr(zip
POSITION
從第三個字符開始
SQL> select regexp_instr(zip
POSITION
Sql代碼
SQL> select regexp_substr(zip
ZIP
b
SQL> select regexp_substr(zip
ZIP
f
Sql代碼
把zip中所有非數字字符替換為
SQL> update person set zip=regexp_replace(zip
SQL> select zip from person;
ZIP
後向引用(backreference)
後向引用是 一個很有用的特性
Sql代碼
SQL> select regexp_replace(
REVERSED_NAME
Chen
在DDL中也可以正則表達式
Sql代碼
SQL> alter table person add constraint constraint_zip check (regexp_like(zip
SQL> create index person_idx on person(regexp_substr(last_name
From:http://tw.wingwit.com/Article/program/Oracle/201311/17446.html