溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么掌握oracle正則表達(dá)式

發(fā)布時(shí)間:2021-11-11 11:40:51 來(lái)源:億速云 閱讀:136 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要介紹“怎么掌握oracle正則表達(dá)式”,在日常操作中,相信很多人在怎么掌握oracle正則表達(dá)式問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么掌握oracle正則表達(dá)式”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1. 正則表達(dá)式規(guī)范

(1).匹配字符

字符類匹配的字符舉 例
\d從0-9的任一數(shù)字\d\d匹配72,但不匹配aa或7a
\D任一非數(shù)字字符\D\D\D匹配abc,但不匹配123
\w任一單詞字符,包括A-Z,a-z,0-9和下劃線\w\w\w\w匹配Ab-2,但不匹配∑£$%*或Ab_@
\W任一非單詞字符\W匹配@,但不匹配a
\s任一空白字符,包括制表符,換行符,回車符,換頁(yè)符和垂直制表符匹配在HTML,XML和其他標(biāo)準(zhǔn)定義中的所有傳統(tǒng)空白字符
\S任一非空白字符空白字符以外的任意字符,如A%&g3;等
.任一字符匹配除換行符以外的任意字符除非設(shè)置了MultiLine先項(xiàng)
[…]括號(hào)中的任一字符[abc]將匹配一個(gè)單字符,a,b或c.
[a-z]將匹配從a到z的任一字符
[^…]不在括號(hào)中的任一字符[^abc]將匹配一個(gè)a、b、c之外的單字符,可以a,b或A、B、C
[a-z]將匹配不屬于a-z的任一字符,但可以匹配所有的大寫(xiě)字母

(2).重復(fù)字符

重復(fù)字符含 義舉 例
{n}匹配前面的字符n次x{2}匹配xx,但不匹配x或xxx
{n,}匹配前面的字符至少n次x{2}匹配2個(gè)或更多的x,如xxx,xxx..
{n,m}匹配前面的字符至少n次,至多m次。如果n為,此參數(shù)為可選參數(shù)x{2,4}匹配xx,xxx,xxxx,但不匹配xxxxx
?匹配前面的字符次或1次,實(shí)質(zhì)上也是可選的x?匹配x或零個(gè)x
+匹配前面的字符次或多次x+匹配x或xx或大于0的任意多個(gè)x
*匹配前面的字符次或更多次x*匹配0,1或更多個(gè)x

(3).定位字符

定位字符描 述
^隨后的模式必須位于字符串的開(kāi)始位置,如果是一個(gè)多行字符串,則必須位于行首。對(duì)于多行文本(包含回車符的一個(gè)字符串)來(lái)說(shuō),需要設(shè)置多行標(biāo)志
$前面的模式必須位于字符串的未端,如果是一個(gè)多行字符串,必須位于行尾
\A前面的模式必須位于字符串的開(kāi)始位置,忽略多行標(biāo)志
\z前面的模式必須位于字符串的未端,忽略多行標(biāo)志
\Z前面的模式必須位于字符串的未端,或者位于一個(gè)換行符前
\b匹配一個(gè)單詞邊界,也就是一個(gè)單詞字符和非單詞字符中間的點(diǎn)。要記住一個(gè)單詞字符是[a-zA-Z0-9]中的一個(gè)字符。位于一個(gè)單詞的詞首
\B匹配一個(gè)非單詞字符邊界位置,不是一個(gè)單詞的詞首

(4).分組字符

分組字符定 義舉 例
()此字符可以組合括號(hào)內(nèi)模式所匹配的字符,它是一個(gè)捕獲組,也就是說(shuō)模式匹配的字符作為最終設(shè)置了ExplicitCapture選項(xiàng)――默認(rèn)狀態(tài)下字符不是匹配的一部分輸入字符串為:ABC1DEF2XY
匹配3個(gè)從A到Z的字符和1個(gè)數(shù)字的正則表達(dá)式:([A-Z]{3}\d)
將產(chǎn)生兩次匹配:Match   1=ABC1;Match 2=DEF2
每次匹配對(duì)應(yīng)一個(gè)組:Match2的第一個(gè)組=ABC;Match3的第1個(gè)組=DEF
有了反向引用,就可以通過(guò)它在正則表達(dá)式中的編號(hào)以及C#和類Group,GroupCollection來(lái)訪問(wèn)組。如果設(shè)置了ExplicitCapture選項(xiàng),就不能使用組所捕獲的內(nèi)容

(5).字符簇: 

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

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

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

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

[[:upper:]] 任何大寫(xiě)字母。

[[:lower:]] 任何小寫(xiě)字母。

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

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

(6).優(yōu)先級(jí)

轉(zhuǎn)義符

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

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

^, $, anymetacharacter 位置和順序

| “或”操作

2.常用函數(shù)

(1).regexp_like(expression, regexp)

返回值為一個(gè)布爾值。如果第一個(gè)參數(shù)匹配第二個(gè)參數(shù)所代表的正則表達(dá)式,那么將返回真,否則將返回假。

(2).regexp_instr(expression, regexp, startindex, times)

返回找到的匹配字符串的位置.

(3).regexp_substr(expression, regexp)

返回第一個(gè)字符串參數(shù)中,與第二個(gè)正則表達(dá)式參數(shù)相匹配的子字符串。

(4).regexp_replace(expression, regexp, replacement)

將expression中的按regexp匹配到的部分用replacement代替.

(5).REGEXP_COUNT (source_char, pattern [, position [, match_param]])

REGEXP_COUNT 返回pattern 在source_char 串中出現(xiàn)的次數(shù)。如果未找到匹配,則函數(shù)返回0。position 變量告訴Oracle 在源串的什么位置開(kāi)始搜索。在開(kāi)始位置之后每出現(xiàn)一次模式,都會(huì)使計(jì)數(shù)結(jié)果增加1。

match_param 變量支持下面幾個(gè)值:

‘i’ 用于不區(qū)分大小寫(xiě)的匹配

‘c’ 用于區(qū)分大小寫(xiě)的匹配

‘n’ 允許句點(diǎn)(.)作為通配符去匹配換行符。如果省略該參數(shù),則句點(diǎn)將不匹配換行符

‘m’ 將源串視為多行。即Oracle 將^和$分別看作源串中任意位置任何行的開(kāi)始和結(jié)束,而不是僅僅看作整個(gè)源串的開(kāi)始或結(jié)束。如果省略該參數(shù),則Oracle將源串看作一行。

‘x’ 忽略空格字符。默認(rèn)情況下,空格字符與自身相匹配。

3.示例:

(1).查找id為4位數(shù)的記錄

select data_object_id,object_name from HH where regexp_like(data_object_id,'^[[:digit:]]{3}$');

select data_object_id,object_name from HH where regexp_like(data_object_id,'^\d{3}$');

(2).查找對(duì)象名包含英文和下劃線的記錄

select object_name from HH where regexp_like(object_name,'^[a-z|A-Z|_]*$')

(3).對(duì)象名以a或A開(kāi)頭的記錄

select object_name from HH where regexp_like(object_name,'^[a|A]')

(4).查找對(duì)象名為全英文,并且以N結(jié)尾

select object_name from HH where regexp_like(object_name,'^[a-z|A-Z]*N$')

(5).查找以非數(shù)字開(kāi)頭的員工信息

select object_name from HH where regexp_like(object_name,'^[^\d]');

(6).查找對(duì)象名中第一個(gè)特殊字符的位置

select object_name,regexp_instr(object_name,'[^[:alnum:]]',1) from HH;

(7).從第三個(gè)字符開(kāi)始,查找員工編號(hào)中第二個(gè)非數(shù)字字符的位置

select object_name,regexp_instr(object_name,'[^[:alnum:]]',3,2) from HH

(8).返回從第二個(gè)字符開(kāi)始檢索,并且對(duì)象名以L開(kāi)頭$結(jié)尾的子串

select object_name,regexp_substr(object_name,'L.*\$$',2) from HH;

(9).把對(duì)象名中所有非字母字符替換為“A”

select regexp_replace(object_name,'[^a-z|A-Z]','A') from HH;

(10).查詢字符串中was的出現(xiàn)次數(shù),忽略大小寫(xiě)。

select regexp_count ('THE PRO-NIECE WAS BORN TODAY, SO EXCITING!', 'Was', 1,'i') from dual;

到此,關(guān)于“怎么掌握oracle正則表達(dá)式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI