真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle中如何使用正則函數(shù)-創(chuàng)新互聯(lián)

oracle中如何使用正則函數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站專(zhuān)注于企業(yè)網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、高陵網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為高陵等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

使用這些函數(shù)可以在字符串中搜索字符模式。例如,假設(shè)有下列年份:


 1965
1968
1971
1970

如果希望獲得1965年和1968年之間的年份(包括1965年和1968年),就可以使用下面的正則表達(dá)式實(shí)現(xiàn)這種功能:

 ^196[5-8]$

正則表達(dá)式中包含許多元字符(metacharacter)。在上面這個(gè)例子中,^、[5-8]以及$都是元字符。^可以匹配一個(gè)字符串的開(kāi)頭;[5-8]可以匹配介于5~8之間的數(shù)字;$可以匹配一個(gè)字符串的結(jié)尾。因此,^196可以匹配以196開(kāi)頭的字符串;[5-8]$可以匹配以5、6、7或8結(jié)尾的字符串。而^196[5-8]$就可以匹配1965、1966、1967和1968,這就是想要的結(jié)果。

在下面這個(gè)例子中,假設(shè)有如下字符串,其中引用了莎士比亞的《羅密歐與朱麗葉》中的一句臺(tái)詞:

 But, soft! What light through yonder window breaks?

如果想查找子字符串light,可以對(duì)引用的字符串應(yīng)用下面的正則表達(dá)式:

 l[[:alpha:]]{4}

在這個(gè)例子中,[[:alpha:]]和{4}都是元字符。[[:alpha:]]可以匹配A-Z或a-z之間的字符;{4}表示前面的匹配模式可以重復(fù)4次。當(dāng)l、[[:alpha:]]和{4}一起使用時(shí),可以匹配以 l 開(kāi)頭的5個(gè)字母組成的序列。因此,當(dāng)對(duì)這個(gè)字符串應(yīng)用正則表達(dá)式 l[[:alpha:]]{4}時(shí),就可以匹配子字符串light。

表4-7列出了在正則表達(dá)式中可以使用的部分元字符,同時(shí)還給出了這些元字符的意思以及使用這些元字符的簡(jiǎn)單例子。

表4-7  正則表達(dá)式中的元字符

元  字 符

意    思

例    子

\

說(shuō)明要匹配的字符是一個(gè)特殊字符、常量或者反向引用。(反向引用重復(fù)上一次匹配。)

\n 匹配換行符

\\ 匹配 \

\( 匹配(

\) 匹配)

^

匹配字符串的開(kāi)頭位置

如果A是字符串中的第一個(gè)字符,^A 匹配A

$

匹配字符串的末尾位置

如果B是字符串中的最后一個(gè)字符,$B匹配B

*

匹配前面的字符0次或多次。

ba*rk 可以匹配 brk、bark、baark等等

+

匹配前面的字符1次或多次。

ba+rk 可以匹配bark、baark等等,但是不能匹配brk

?

匹配前面的字符0次或1次

ba?rk 只能匹配brk和bark

{n}

匹配一個(gè)字符恰好n次,其中n是一個(gè)整數(shù)

hob{2}it 可以匹配hobbit


(續(xù)表)

元  字  符

意    思

例    子

{n,m}

匹配一個(gè)字符至少n次,最多m次,其中n和m都是整數(shù)

hob{2,3}it 只能匹配hobbit和hobbbit

.

匹配除null之外的任意單個(gè)字符

hob.it 可以匹配hobait、hobbit等等

(pattern)

匹配指定模式的一個(gè)子表達(dá)式。可以使用子表達(dá)式構(gòu)成復(fù)雜的正則表達(dá)式。在這種子表達(dá)式中,可以訪問(wèn)單次的匹配,稱(chēng)為捕獲(capture)

anatom(y|ies) 可以匹配anatomy和anatomies

x|y

匹配x或y,其中x和y是一個(gè)或多個(gè)字符

war|peace 可以匹配 war 或 peace

[abc]

匹配中括號(hào)內(nèi)的任意一個(gè)字符

[ab]bc 可以匹配 abc 和 bbc

[a-z]

匹配指定范圍內(nèi)的任意一個(gè)字符

[a-c]bc 可以匹配 abc、bbc和cbc

[: :]

指定一個(gè)字符類(lèi),可以匹配該類(lèi)中的任何字符

[:alphanum:] 可以匹配字符0-9、A-Z和a-z

[:alpha:] 可以匹配字符A-Z和a-z

[:blank:] 可以匹配空格或tab鍵

[:digit:] 可以匹配數(shù)字 0-9

[:graph:] 可以匹配非空字符

[:lower:] 可以匹配小寫(xiě)字母a-z

[:print:] 與 [:graph:] 類(lèi)似,不同之處在于[:print:] 包括空格字符

[:punct:] 可以匹配標(biāo)點(diǎn)符號(hào).,'''等等

[:space:] 可以匹配所有的空白字符

[:upper:] 可以匹配所有的大寫(xiě)字母A~Z

[:xdigit:] 可以匹配十六進(jìn)制數(shù)字0~9、A~F和a~f

[..]

匹配一個(gè)組合元素,例如多字符元素

無(wú)

[==]

指定等價(jià)類(lèi)

無(wú)

這是對(duì)前一次捕獲的一個(gè)反向引用,其中n是一個(gè)正整數(shù)

(.)\1 可以匹配兩個(gè)連續(xù)相同的字符。(.)可以匹配除null之外的任何單個(gè)字符,而 \1 則重復(fù)上次匹配的內(nèi)容,即再次匹配相同的字符,因此可以匹配兩個(gè)連續(xù)相同的字符

Oracle Database 10g Release 2新增加了很多類(lèi)似于Perl的元字符,如表4-8所示。

表4-8  類(lèi)似于Perl的元字符

元  字  符

含    義

\d

數(shù)字字符

\D

非數(shù)字字符

\w

字母字符

\W

非字母字符

\s

空白字符

\S

非空白字符


(續(xù)表)

元  字  符

含    義

\A

只匹配字符串的開(kāi)頭位置

\Z

只匹配字符串的末尾位置或者字符串末尾的換行符之前的位置

*?

匹配前面的模式元素0次或多次

+?

匹配前面的模式元素1次或多次

??

匹配前面的模式元素0次或1次

{n}

匹配前面的模式元素恰好n次

{n,}

匹配前面的模式元素至少n次

{n,m}

匹配前面的模式元素至少n次,但不超過(guò)m次

表4-9列出了正則表達(dá)式函數(shù)。正則表達(dá)式函數(shù)是在Oracle Database 10g中新增加的, Oracle Database 11g中又增加了一些條目,如下表所示。

表4-9  正則表達(dá)式函數(shù)

函    數(shù)

說(shuō)    明

REGEXP_LIKE( x, pattern

 [, match_option])

從x中搜索pattern參數(shù)中定義的正則表達(dá)式。可以使用match_option修改默認(rèn)匹配選項(xiàng),該參數(shù)可以被設(shè)置為:

?  'c',說(shuō)明在匹配時(shí)區(qū)分大小寫(xiě)(默認(rèn)選項(xiàng))

?  'I',說(shuō)明在匹配時(shí)不區(qū)分大小寫(xiě)

?  'n',允許使用可以匹配任意字符的操作符

?  'm',將x作為一個(gè)包含多行的字符串

REGEXP_INSTR( x, pattern

 [, start

 [, occurrence

 [, return_option

 [, match_option

[, subexp_option]]]])

在x中查找pattern,并返回pattern所在的位置。可以指定以下的可選參數(shù):

?  start 開(kāi)始查找的位置。默認(rèn)值是1,指x的第一個(gè)字符。

?  occurrence 說(shuō)明應(yīng)該返回第幾次出現(xiàn)pattern的位置。默認(rèn)值是1,這意味著函數(shù)返回pattern第一次在x中出現(xiàn)的位置。

?  return_option 說(shuō)明應(yīng)該返回什么整數(shù)。若該參數(shù)為0,則說(shuō)明要返回的整數(shù)是x中的第一個(gè)字符的位置;若該參數(shù)為非0的整數(shù),則說(shuō)明要返回的整數(shù)為x中出現(xiàn)在pattern之后的字符的位置

? match_option 修改默認(rèn)的匹配設(shè)置,其工作方式與REGEXP_LIKEK()中指定的方式相同。

?  subexp_option是Oracle Database 11g新增加的,其工作方式如下:對(duì)于具有子表達(dá)式的模式,subexp_option是0~9之間的一個(gè)非負(fù)數(shù),指出pattern中的哪個(gè)子表達(dá)式是函數(shù)的目標(biāo)。例如,考慮表達(dá)式0123(((abc)(de)f)ghi)45(678),此表達(dá)式有5個(gè)子表達(dá)式,分別是:"abcdefghi"、"abcdef"、"abc"、"de"和"678"。
如果subexp_option是0,則返回pattern的位置。如果pattern沒(méi)有正確的子表達(dá)式數(shù)字,則函數(shù)返回0。subexp_option為空值則返回空。subexp_option的默認(rèn)值是0


(續(xù)表)

函    數(shù)

說(shuō)    明

REGEXP_REPLACE(x, pattern

 [, replace_string

 [, start

 [, occurrence

 [, match_option]]]])

在x中查找pattern,并將其替換為replace_string。其他選項(xiàng)的意思與 REGEXP_INSTR()函數(shù)的參數(shù)完全相同

REGEXP_SUBSTR( x, pattern

 [, start

 [, occurrence

 [, match_option

[, subexp_option]]]])

返回x中可以匹配pattern的一個(gè)子字符串,其開(kāi)始位置由start指定。其他選項(xiàng)的意思與 REGEXP_INSTR()函數(shù)的參數(shù)完全相同。Oracle Database 11g新增加的subexp_option其工作方式與REGEXP_INSTR()函數(shù)中相同

REGEXP_COUNT( x, pattern

 [, start

 [, match_option]])

這是Oracle Database 11g新增加的一個(gè)函數(shù)。在x中查找pattern,并返回pattern在x中出現(xiàn)的次數(shù)??梢蕴峁┮韵聝蓚€(gè)可選參數(shù):

?  start 開(kāi)始查找的位置。默認(rèn)值是1,指x的第一個(gè)字符。

?  match_option 修改默認(rèn)的匹配設(shè)置,其工作方式與REGEXP_LIKEK()中相同

接下來(lái)的幾節(jié)將會(huì)介紹更多有關(guān)正則表達(dá)式函數(shù)的知識(shí)。

1. REGEXP_LIKE()

REGEXP_LIKE(x, pattern [, match_option])用于在x中查找pattern參數(shù)中定義的正則表達(dá)式,該函數(shù)還可以提供一個(gè)可選參數(shù)match_option,它可以設(shè)置為下面幾個(gè)字符之一:

● 'c',說(shuō)明在匹配時(shí)區(qū)分大小寫(xiě)(默認(rèn)選項(xiàng))

● 'I',說(shuō)明在匹配時(shí)不區(qū)分大小寫(xiě)

● 'n',允許使用可以匹配任意字符的操作符

● 'm',將x 作為一個(gè)包含多行的字符串

下面這個(gè)查詢(xún)使用REGEXP_LIKE函數(shù)檢索生日在1965年到1968年之間的顧客:

 SELECT customer_id, first_name, last_name, dob
FROM customers
WHERE REGEXP_LIKE(TO_CHAR(dob, 'YYYY'), '^196[5-8]$');


CUSTOMER_ID FIRST_NAME LAST_NAME   DOB

----------- ---------- ---------- ---------

  1 John         Brown       01-JAN-65

  2 Cynthia      Green       05-FEB-68

下面這個(gè)查詢(xún)檢索名字以J或j開(kāi)頭的顧客。注意傳遞給REGEXP_LIKE()的正則表達(dá)式是 ^j,匹配選項(xiàng)是i,這說(shuō)明不區(qū)分大小寫(xiě),因此在本例中,^j 可以匹配J或j:

 SELECT customer_id, first_name, last_name, dob
FROM customers
WHERE REGEXP_LIKE(first_name, '^j', 'i');


CUSTOMER_ID FIRST_NAME LAST_NAME   DOB

----------- ---------- ---------- ---------

  1 John         Brown       01-JAN-65

2. REGEXP_INSTR()

REGEXP_INSTR(x, pattern [, start [, occurrence [, return_option [, match_option]]]])用于在x中查找pattern;REGEXP_INSTR()返回pattern出現(xiàn)的位置。匹配位置從1開(kāi)始。

下面這個(gè)查詢(xún)使用REGEXP_INSTR函數(shù)返回匹配正則表達(dá)式 l[[:alpha:]]{4}的位置:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}') AS result
FROM dual;
RESULT
----------
17

注意返回值為17,這是light中l(wèi)的位置。

下面這個(gè)查詢(xún)返回第二次匹配正則表達(dá)式 s[[:alpha:]]{3}的位置,匹配位置從1開(kāi)始:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window softly breaks?',
's[[:alpha:]]{3}', 1, 2) AS result
FROM dual;


RESULT

----------

45

下面這個(gè)查詢(xún)使用REGEXP_INSTR函數(shù)返回第二次匹配字母 o 的位置,匹配位置從10開(kāi)始:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window breaks?',
'o', 10, 2) AS result
FROM dual;
RESULT
----------
32

3. REGEXP_REPLACE()

REGEXP_REPLACE(x, pattern [, replace_string [, start [, occurrence[, match_option]]]])用于在x中查找pattern,并將其替換為 replace_string。

下面這個(gè)查詢(xún)使用REGEXP_REPLACE函數(shù)將匹配正則表達(dá)式 l[[:alpha:]]{4}的子字符串替換為字符串 sound:

 SELECT
REGEXP_REPLACE('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}', 'sound') AS result
FROM dual;
RESULT
---------------------------------------------------
But, soft! What sound through yonder window breaks?

注意light已經(jīng)被替換為sound。

4. REGEXP_SUBSTR()

REGEXP_SUBSTR(x, pattern[, start [, occurrence[, match_option]]])用于在x中查找匹配pattern的子字符串,開(kāi)始位置由 start指定。

下面這個(gè)查詢(xún)使用REGEXP_SUBSTR函數(shù)返回匹配正則表達(dá)式 l[[:alpha:]]{4}的子字符串:

 SELECT
REGEXP_SUBSTR('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}') AS result
FROM dual;
RESUL
-----
light

5. REGEXP_COUNT()

REGEXP_COUNT()是Oracle Database 11g新增加的一個(gè)函數(shù)。REGEXP_COUNT(x, pattern[, start [,match_option]])用于在x中查找pattern,并返回pattern在x中出現(xiàn)的次數(shù)。可以提供可選參數(shù)start,指出要從x中開(kāi)始查找pattern的那個(gè)字符;也可以提供可選的match_option字符串,指出匹配選項(xiàng)。

下面這個(gè)查詢(xún)使用REGEXP_COUNT函數(shù)返回正則表達(dá)式s[[:alpha:]]{3}出現(xiàn)的次數(shù):

 SELECT
REGEXP_COUNT('But, soft! What light through yonder window softly breaks?',
's[[:alpha:]]{3}') AS result
FROM dual;
    RESULT
----------
2

注意返回結(jié)果是2,這表明正則表達(dá)式在提供的字符串中有兩次匹配。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。


文章標(biāo)題:oracle中如何使用正則函數(shù)-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://weahome.cn/article/dodics.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部