oracle終於在10g中提供了對正規表示式的支援,以前那些需要通過like來進行的複雜的匹配就可以通過使用正規表示式更簡單的實現。
oracle10g正規表示式提高了sql靈活性。有效的解決了資料有效性,重複詞的辨認,無關的空白檢測,或者分解多個正則組成的字串等問題。
oracle10g支援正規表示式的四個新函式分別,它們使用posix正規表示式代替了老的百分號(%)和萬用字元(_)字元。
1,regexp_like:與like的功能相似
2,regexp_instr:與instr的功能相似:返回字元的個數
3,regexp_substr:與substr的功能相似:擷取字串
4,regexp_replace:與replace的功能相似
在新的函式中使用正規表示式來代替萬用字元『%』和『_』。
正規表示式由標準的元字元(metacharacters)所構成:
'^'匹配輸入字串的開始位置,在方括號表示式中使用,此時它表示不接受該字元集合。
'$'匹配輸入字串的結尾位置。如果設定了regexp物件的multiline屬性,則$也匹配'n'或'r'。
'.'匹配除換行符n之外的任何單字元。
'?'匹配前面的子表示式零次或一次。
'+'匹配前面的子表示式一次或多次。
'*'匹配前面的子表示式零次或多次。
'|'指明兩項之間的乙個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字串。
'()'標記乙個子表示式的開始和結束位置。
''標記乙個中括號表示式。
''乙個精確地出現次數範圍,m=《出現次數<=n,''表示出現m次,''表示至少出現m次。
num匹配num,其中num是乙個正整數。對所獲取的匹配的引用。
字元簇:
[[:alpha:]]任何字母。
[[:digit:]]任何數字。
[[:alnum:]]任何字母和數字。
[[:space:]]任何白字元。
[[:upper:]]任何大寫字母。
[[:lower:]]任何小寫字母。
[[:punct:]]任何標點符號。
[[:xdigit:]]任何16進製制的數字,相當於[0-9a-fa-f]。
各種操作符的運算優先順序
1.轉義符
2.(),(?:),(?=),圓括號和方括號
3.*,+,?,,,限定符
4.^,$,anymetacharacter位置和順序
4.|「或」操作
示例:
一、regexp_like
/*formattedon2009/11/1119:03(formatterplusv4.8.8)*/
select*
from
scott
.emp
where
regexp_like
(ename
,'^a');
select*
from
scott
.emp
where
regexp_like
(ename
,'a');
select*
from
scott
.emp
where
regexp_like
(ename
,'^a.*e$');
select*
from
scott
.emp
where
regexp_like
(ename
,'^[[:lower:]]|[[:digit:]]');
select*
from
scott
.emp
where
regexp_like
(ename
,'^[[:lower:]]');
select
sal
from
scott
.emp
where
regexp_like
(sal
,'[^[:digit:]]');
select
sal
from
scott
.emp
where
regexp_like
(sal
,'^[^[:digit:]]');
二、regexp_instr
/*formattedon2009/11/1119:03(formatterplusv4.8.8)*/
select
regexp_instr
(ename
,'[[:digit:]]$')
from
scott
.emp;
select
regexp_instr(mc
,'[[:digit:]]+$')
from
scott
.emp;
select
regexp_instr
('thepriceis$400.'
,'$[[:digit:]]+')
from
dual;
select
regexp_instr
('onetwothree'
,'[^[[:lower:]]]')
from
dual;
select
regexp_instr
(',,,,,'
,'[^,]*')
from
dual;
select
regexp_instr
(',,,,,'
,'[^,]')
from
dual;
三、regexp_substr
/*formattedon2009/11/1119:04(formatterplusv4.8.8)*/
select
regexp_substr
(ename
,'[a-z]+')
from
scott
.emp;
select
regexp_substr
(sal
,'[0-9]+')
from
scott
.emp;
select
regexp_substr
('aababcde'
,'^a.*b')
from
dual;
四、regexp_replace
/*formattedon2009/11/1119:06(formatterplusv4.8.8)*/
select
regexp_replace
('joesmith'
,'()'
,',')as
rx_replace
from
dual;
select
regexp_replace
('aabbcc'
,'(.*)(.*)(.*)'
,'3,2,1')
from
dual
;
利用Oracle 10G的正規表示式分析字串
最近在思考乙個專案時,需要對乙個字串進行分析,其中要取得字串的所有中文字內容,利用pb還真不好實現,首先想到了oracle 10g新增的正 則表示式功能,經測試正是我所需要的.select regexp substr 00a 10mm poly webbing nyht05 090 中間 3mm 0...
oracle 正規表示式
with temp as select br.777 1 a from dual union all select bs.6 175 a from dual union all select d.140 supplement 1 a from dual union all select e.191 ...
oracle正規表示式
在資料庫可直接執行下面語句,但在程式中不能執行,regexp like t.ipaddress,25 0 5 2 0 4 0 9 01 0 9 0 9 25 0 5 2 0 4 0 9 01 0 9 0 9 報錯有特殊字元 在句末再加乙個 改為 regexp like t.ipaddress,25 ...