Oracle 10g 正規表示式

2021-08-26 06:14:30 字數 4070 閱讀 1141

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 ...