久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

oracle中如何使用正則函數

170次閱讀
沒有評論

共計 6343 個字符,預計需要花費 16 分鐘才能閱讀完成。

oracle 中如何使用正則函數,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

 1965
1970

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

 ^196[5-8]$

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

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

 But, soft! What light through yonder window breaks?

如果想查找子字符串 light,可以對引用的字符串應用下面的正則表達式:

 l[[:alpha:]]{4}

在這個例子中,[[:alpha:]]和 {4} 都是元字符。[[:alpha:]]可以匹配 A - Z 或 a - z 之間的字符;{4}表示前面的匹配模式可以重復 4 次。當 l、[[:alpha:]]和 {4} 一起使用時,可以匹配以 l 開頭的 5 個字母組成的序列。因此,當對這個字符串應用正則表達式 l[[:alpha:]]{4}時,就可以匹配子字符串 light。

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

表 4 -7  正則表達式中的元字符

元   字   符

意   思

例   子

\

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

\n  匹配換行符

\\  匹配  \

\(  匹配(

\)  匹配)

^

匹配字符串的開頭位置

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

$

匹配字符串的末尾位置

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

*

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

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

+

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

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

?

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

ba?rk  只能匹配 brk 和 bark

{n}

匹配一個字符恰好 n 次,其中 n 是一個整數

hob{2}it  可以匹配 hobbit

 

(續表) 

元   字   符

意   思

例   子

{n,m}

匹配一個字符至少 n 次,最多 m 次,其中 n 和 m 都是整數

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

.

匹配除 null 之外的任意單個字符

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

(pattern)

匹配指定模式的一個子表達式。可以使用子表達式構成復雜的正則表達式。在這種子表達式中,可以訪問單次的匹配,稱為捕獲(capture)

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

x|y

匹配 x 或 y,其中 x 和 y 是一個或多個字符

war|peace  可以匹配  war  或  peace

[abc]

匹配中括號內的任意一個字符

[ab]bc  可以匹配  abc  和  bbc

[a-z]

匹配指定范圍內的任意一個字符

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

[: :]

指定一個字符類,可以匹配該類中的任何字符

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

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

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

[:digit:]  可以匹配數字  0-9

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

[:lower:]  可以匹配小寫字母 a -z

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

[:punct:]  可以匹配標點符號., 等等

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

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

[:xdigit:]  可以匹配十六進制數字 0~9、A~F 和 a~f

[..]

匹配一個組合元素,例如多字符元素

[==]

指定等價類

\n

這是對前一次捕獲的一個反向引用,其中 n 是一個正整數

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

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

表 4 -8  類似于 Perl 的元字符

元   字   符

含   義

\d

數字字符

\D

非數字字符

\w

字母字符

\W

非字母字符

\s

空白字符

\S

非空白字符

 

(續表) 

元   字   符

含   義

\A

只匹配字符串的開頭位置

\Z

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

*?

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

+?

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

??

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

{n}

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

{n,}

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

{n,m}

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

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

表 4 -9  正則表達式函數

函   數

說   明

REGEXP_LIKE(x, pattern

 [, match_option])

從 x 中搜索 pattern 參數中定義的正則表達式。可以使用 match_option 修改默認匹配選項,該參數可以被設置為:

?  c,說明在匹配時區分大小寫(默認選項)

?  I,說明在匹配時不區分大小寫

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

?  m,將 x 作為一個包含多行的字符串

REGEXP_INSTR(x, pattern

 [, start

 [, occurrence

 [, return_option

 [, match_option

[, subexp_option]]]])

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

? start  開始查找的位置。默認值是 1,指 x 的第一個字符。

? occurrence  說明應該返回第幾次出現 pattern 的位置。默認值是 1,這意味著函數返回 pattern 第一次在 x 中出現的位置。

? return_option  說明應該返回什么整數。若該參數為 0,則說明要返回的整數是 x 中的第一個字符的位置;若該參數為非 0 的整數,則說明要返回的整數為 x 中出現在 pattern 之后的字符的位置

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

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

 

(續表) 

函   數

說   明

REGEXP_REPLACE(x, pattern

 [, replace_string

 [, start

 [, occurrence

 [, match_option]]]])

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

REGEXP_SUBSTR(x, pattern

 [, start

 [, occurrence

 [, match_option

[, subexp_option]]]])

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

REGEXP_COUNT(x, pattern

 [, start

 [, match_option]])

 

這是 Oracle Database 11g 新增加的一個函數。在 x 中查找 pattern,并返回 pattern 在 x 中出現的次數。可以提供以下兩個可選參數:

? start  開始查找的位置。默認值是 1,指 x 的第一個字符。

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

接下來的幾節將會介紹更多有關正則表達式函數的知識。

1. REGEXP_LIKE()

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

●  c,說明在匹配時區分大小寫(默認選項)

●  I,說明在匹配時不區分大小寫

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

●  m,將 x 作為一個包含多行的字符串

下面這個查詢使用 REGEXP_LIKE 函數檢索生日在 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

下面這個查詢檢索名字以 J 或 j 開頭的顧客。注意傳遞給 REGEXP_LIKE()的正則表達式是 ^j,匹配選項是 i,這說明不區分大小寫,因此在本例中,^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 出現的位置。匹配位置從 1 開始。

下面這個查詢使用 REGEXP_INSTR 函數返回匹配正則表達式 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 的位置。

下面這個查詢返回第二次匹配正則表達式 s[[:alpha:]]{3}的位置,匹配位置從 1 開始:

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

RESULT

———-

45

下面這個查詢使用 REGEXP_INSTR 函數返回第二次匹配字母 o 的位置,匹配位置從 10 開始:

 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。

下面這個查詢使用 REGEXP_REPLACE 函數將匹配正則表達式 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 已經被替換為 sound。

4. REGEXP_SUBSTR()

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

下面這個查詢使用 REGEXP_SUBSTR 函數返回匹配正則表達式 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 新增加的一個函數。REGEXP_COUNT(x, pattern[, start [,match_option]])用于在 x 中查找 pattern,并返回 pattern 在 x 中出現的次數。可以提供可選參數 start,指出要從 x 中開始查找 pattern 的那個字符;也可以提供可選的 match_option 字符串,指出匹配選項。

下面這個查詢使用 REGEXP_COUNT 函數返回正則表達式 s[[:alpha:]]{3}出現的次數:

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計6343字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 德钦县| 徐水县| 广安市| 海城市| 长海县| 思南县| 克什克腾旗| 峨眉山市| 科技| 石楼县| 西乌珠穆沁旗| 阿勒泰市| 北流市| 扎鲁特旗| 金秀| 乌拉特后旗| 子长县| 长子县| 永胜县| 手游| 汝阳县| 聂拉木县| 张家港市| 丹凤县| 辉南县| 高邮市| 定南县| 柘城县| 子长县| 德江县| 布尔津县| 班玛县| 和林格尔县| 阳信县| 上杭县| 衡水市| 岚皋县| 齐齐哈尔市| 睢宁县| 儋州市| 嘉兴市|