Oracle正則表達(dá)式轉(zhuǎn)載

作者:Orson

出處:http://www.cnblogs.com/java-class/


Oracle 正則表達(dá)式

閱讀目錄

1.Oracle(regular expression)簡(jiǎn)單介紹

2.Oracle正則特殊字符

3.Oracle正則字符簇

4.各種操作符的運(yùn)算優(yōu)先級(jí)

5.模擬測(cè)試?yán)?/p>

6.Oracle對(duì)應(yīng)正則函數(shù)

回到頂部

1.Oracle(regular expression)簡(jiǎn)單介紹

正則表達(dá)式已經(jīng)在很多軟件中得到廣泛的應(yīng)用,包括*nix(Linux, Unix等)燎悍,HP等操作系統(tǒng)垂寥,PHP柄冲,C#鞠眉,Java等開發(fā)環(huán)境。

Oracle 10g正則表達(dá)式提高了SQL靈活性澄耍。有效的解決了數(shù)據(jù)有效性浊伙,重復(fù)詞的辨認(rèn), 無關(guān)的空白檢測(cè),或者分解多個(gè)正則組成的字符串等問題为障。

Oracle 10g支持正則表達(dá)式的四個(gè)新函數(shù)分別是:REGEXP_LIKE晦闰、REGEXP_INSTR、REGEXP_SUBSTR鳍怨、和REGEXP_REPLACE呻右。

它們使用POSIX 正則表達(dá)式代替了老的百分號(hào)(%)和通配符(_)字符。

回到頂部

2.Oracle正則特殊字符

'^' 匹配輸入字符串的開始位置鞋喇,在方括號(hào)表達(dá)式中使用声滥,此時(shí)它表示不接受該字符集合。

'$' 匹配輸入字符串的結(jié)尾位置侦香。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性落塑,則 $ 也匹配 '\n' 或'\r'。

'.'? 匹配除換行符 \n之外的任何單字符鄙皇。

'?' 匹配前面的子表達(dá)式零次或一次芜赌。

'*' 匹配前面的子表達(dá)式零次或多次。

'+' 匹配前面的子表達(dá)式一次或多次伴逸。

'( )' 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置缠沈。

'[]' 標(biāo)記一個(gè)中括號(hào)表達(dá)式。

'{m,n}' 一個(gè)精確地出現(xiàn)次數(shù)范圍,m=<出現(xiàn)次數(shù)<=n洲愤,'{m}'表示出現(xiàn)m次颓芭,'{m,}'表示至少出現(xiàn)m次。

'|' 指明兩項(xiàng)之間的一個(gè)選擇柬赐。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數(shù)字組合成的字符串亡问。

\num 匹配 num,其中 num 是一個(gè)正整數(shù)肛宋。對(duì)所獲取的匹配的引用州藕。

正則表達(dá)式的一個(gè)很有用的特點(diǎn)是可以保存子表達(dá)式以后使用,被稱為Backreferencing酝陈。

允許復(fù)雜的替換能力 如調(diào)整一個(gè)模式到新的位置或者指示被代替的字符或者單詞的位置床玻。

被匹配的子表達(dá)式存儲(chǔ)在臨時(shí)緩沖區(qū)中,緩沖區(qū)從左到右編號(hào), 通過\數(shù)字符號(hào)訪問沉帮。

下面的例子列出了把名字 aa bb cc 變成cc, bb, aa.

Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual锈死; REGEXP_REPLACE('ELLENHILDISMIT cc, bb, aa'\' 轉(zhuǎn)義符)

回到頂部

3.Oracle正則字符簇

[[:alpha:]] 任何字母。

[[:digit:]] 任何數(shù)字穆壕。

[[:alnum:]] 任何字母和數(shù)字待牵。

[[:space:]] 任何白字符。

[[:upper:]] 任何大寫字母喇勋。

[[:lower:]] 任何小寫字母缨该。

[[unct:]] 任何標(biāo)點(diǎn)符號(hào)。

[[:xdigit:]] 任何16進(jìn)制的數(shù)字川背,相當(dāng)于[0-9a-fA-F]压彭。

回到頂部

4.各種操作符的運(yùn)算優(yōu)先級(jí)

\ 轉(zhuǎn)義符

(), (?, (?=), [] 圓括號(hào)和方括號(hào)

*, +, ?, {n}, {n,}, {n,m} 限定符

^, $, \anymetacharacter 位置和順序

| “或”操作

回到頂部

5.模擬測(cè)試?yán)?/p>

--測(cè)試數(shù)據(jù)

復(fù)制代碼

create table test(mc varchar2(60));

insert into test values('112233445566778899');

insert into test values('22113344 5566778899');

insert into test values('33112244 5566778899');

insert into test values('44112233 5566 778899');

insert into test values('5511 2233 4466778899');

insert into test values('661122334455778899');

insert into test values('771122334455668899');

insert into test values('881122334455667799');

insert into test values('991122334455667788');

insert into test values('aabbccddee');

insert into test values('bbaaaccddee');

insert into test values('ccabbddee');

insert into test values('ddaabbccee');

insert into test values('eeaabbccdd');

insert into test values('ab123');

insert into test values('123xy');

insert into test values('007ab');

insert into test values('abcxy');

insert into test values('The final test is is is how to find duplicate words.');

commit;

復(fù)制代碼

a.REGEXP_LIKE

復(fù)制代碼

select * from test where regexp_like(mc,'^a{1,3}');

select * from test where regexp_like(mc,'a{1,3}');

select * from test where regexp_like(mc,'^a.*e$');

select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');

select * from test where regexp_like(mc,'^[[:lower:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');

復(fù)制代碼

b.REGEXP_INSTR

復(fù)制代碼

Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;

Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;

Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;

Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;

復(fù)制代碼

c.REGEXP_SUBSTR

復(fù)制代碼

SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;

SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;

SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;

d.REGEXP_REPLACE

Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;

Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual

復(fù)制代碼

回到頂部

6.Oracle對(duì)應(yīng)正則函數(shù)

regexp_like.regexp_instr.regexp_substr.與 regexp_replace。

它們?cè)谟梅ㄉ吓coracle sql 函數(shù)like.instr.substr 與replace 用法,但是它們使用posix 正則表達(dá)式代替了老的百分號(hào)(%)與通配符(_)字符渗常。

regexp_like 與like 操作符相似。如果第一個(gè)參數(shù)匹配正則表達(dá)式它就解析為true汗盘。

例如where regexp_like(ename,^j[ao],i) 將在ename 以ja 或jo 開始的情況下返回一行數(shù)據(jù)皱碘。參數(shù)指定正則表達(dá)式是大小寫敏感的。

另外還可以在check 約束與函數(shù)索引中指定regexp_like.例如: 【擴(kuò)展信息:MYSQL基本數(shù)據(jù)庫術(shù)語】隐孽。

^ 表示字符串的開始 $ 表示字符串的結(jié)束 . 表示任何字符字符的范圍癌椿,比如說[a-z],表示任何 ascii 小寫字母,與字符類"[[:lower:]]"" 等價(jià) ? 允許一個(gè)后繼字符匹配零次或一次 + 允許一個(gè)后繼字符匹配一次或多次 * 表示零次或多次菱阵。

可以使用"{m,n}" 指定一個(gè)精確地出現(xiàn)范圍,其意思是“出現(xiàn)從m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”踢俄。

還可以使用圓括號(hào)組合字符的集合,使用"|"(豎線)表示可替換.例如,字符串^([a-z]+|[0-9]+)$將匹配所有由小寫字母或數(shù)字組合成的字符串。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晴及,一起剝皮案震驚了整個(gè)濱河市都办,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖琳钉,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势木,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡歌懒,警方通過查閱死者的電腦和手機(jī)啦桌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來及皂,“玉大人甫男,你說我怎么就攤上這事⊙樯眨” “怎么了板驳?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)噪窘。 經(jīng)常有香客問我笋庄,道長(zhǎng),這世上最難降的妖魔是什么倔监? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任直砂,我火速辦了婚禮,結(jié)果婚禮上浩习,老公的妹妹穿的比我還像新娘静暂。我一直安慰自己,他們只是感情好谱秽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布洽蛀。 她就那樣靜靜地躺著,像睡著了一般疟赊。 火紅的嫁衣襯著肌膚如雪郊供。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天近哟,我揣著相機(jī)與錄音驮审,去河邊找鬼。 笑死吉执,一個(gè)胖子當(dāng)著我的面吹牛疯淫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戳玫,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼熙掺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了咕宿?” 一聲冷哼從身側(cè)響起币绩,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤蜡秽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后类浪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载城,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年费就,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诉瓦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡力细,死狀恐怖睬澡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眠蚂,我是刑警寧澤煞聪,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站逝慧,受9級(jí)特大地震影響昔脯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笛臣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一云稚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沈堡,春花似錦静陈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至僧免,卻和暖如春刑赶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懂衩。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工角撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勃痴。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像热康,于是被迫代替她去往敵國和親沛申。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容