Oracle正則表達(dá)式
正則表達(dá)式具有強(qiáng)大、便捷、高效的文本處理功能。能夠添加、刪除、分析、疊加、插入和修整各種類型的文本和數(shù)據(jù)。Oracle從10g開始支持正則表達(dá)式。
下面通過一些例子來說明使用正則表達(dá)式來處理一些工作中常見的問題。
1.
REGEXP_SUBSTR
REGEXP_SUBSTR 函數(shù)使用正則表達(dá)式來指定返回串的起點(diǎn)和終點(diǎn),返回與source_string 字符集中的VARCHAR2 或CLOB 數(shù)據(jù)相同的字符串。
語法:
--1.REGEXP_SUBSTR與SUBSTR函數(shù)相同,返回截取的子字符串
REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])
注:
srcstr 源字符串
pattern 正則表達(dá)式樣式
position 開始匹配字符位置
occurrence 匹配出現(xiàn)次數(shù)
match_option 匹配選項(xiàng)(區(qū)分大小寫)
1.1
從字符串中截取子字符串
SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+') FROM dual;
Output: 1PSN
[[:alnum:]]+ 表示匹配1個(gè)或者多個(gè)字母或數(shù)字字符。
SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+', 1, 2) FROM dual;
Output: 231
與上面一個(gè)例子相比,多了兩個(gè)參數(shù)
1 表示從源字符串的第一個(gè)字符開始查找匹配
2 表示第2次匹配到的字符串(默認(rèn)值是“1”,如上例)
select regexp_substr('@@/231_3253/ABc','@*[[:alnum:]]+') from dual;
Output: 231
@* 表示匹配0個(gè)或者多個(gè)@
[[:alnum:]]+ 表示匹配1個(gè)或者多個(gè)字母或數(shù)字字符
注意:需要區(qū)別“+”和“*”的區(qū)別
select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]*') from dual;
Output: @
@+ 表示匹配1個(gè)或者多個(gè)@
[[:alnum:]]* 表示匹配0個(gè)或者多個(gè)字母或數(shù)字字符
select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]+') from dual;
Output: Null
@+ 表示匹配1個(gè)或者多個(gè)@
[[:alnum:]]+ 表示匹配1個(gè)或者多個(gè)字母或數(shù)字字符
select regexp_substr('@1PSN/231_3253/ABc125','[[:digit:]]+$') from dual;
Output: 125
[[:digit:]]+$ 表示匹配1個(gè)或者多個(gè)數(shù)字結(jié)尾的字符
select regexp_substr('@1PSN/231_3253/ABc','[^[:digit:]]+$') from |
|