主頁(yè) > 知識(shí)庫(kù) > Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)

Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)

熱門(mén)標(biāo)簽:外呼系統(tǒng)鄭州 北京營(yíng)銷(xiāo)外呼系統(tǒng)廠家 沈陽(yáng)400電話是如何辦理 地圖標(biāo)注付款了怎么找不到了 貴陽(yáng)智能電銷(xiāo)機(jī)器人官網(wǎng) 百度地圖標(biāo)注員是干什么 北京外呼系統(tǒng)公司排名 溫州人工外呼系統(tǒng) 外呼系統(tǒng)口號(hào)

Oracle 的正規(guī)表達(dá)式的實(shí)施是以各種 SQL 函數(shù)和一個(gè) WHERE 子句操作符的形式出現(xiàn)的。如果您不熟悉正規(guī)表達(dá)式,那么這篇文章可以讓您了解一下這種新的極其強(qiáng)大然而表面上有點(diǎn)神秘的功能。已經(jīng)對(duì)正規(guī)表達(dá)式很熟悉的讀者可以了解如何在 Oracle SQL 語(yǔ)言的環(huán)境中應(yīng)用這種功能。

什么是正規(guī)表達(dá)式?
  正規(guī)表達(dá)式由一個(gè)或多個(gè)字符型文字和/或元字符組成。在最簡(jiǎn)單的格式下,正規(guī)表達(dá)式僅由字符文字組成,如正規(guī)表達(dá)式 cat。它被讀作字母 c,接著是字母 a 和 t,這種模式匹配 cat、location 和 catalog 之類(lèi)的字符串。元字符提供算法來(lái)確定 Oracle 如何處理組成一個(gè)正規(guī)表達(dá)式的字符。當(dāng)您了解了各種元字符的含義時(shí),您將體會(huì)到正規(guī)表達(dá)式用于查找和替換特定的文本數(shù)據(jù)是非常強(qiáng)大的。

  驗(yàn)證數(shù)據(jù)、識(shí)別重復(fù)關(guān)鍵字的出現(xiàn)、檢測(cè)不必要的空格,或分析字符串只是正規(guī)表達(dá)式的許多應(yīng)用中的一部分。您可以用它們來(lái)驗(yàn)證電話號(hào)碼、郵政編碼、電子郵件地址、社會(huì)安全號(hào)碼、IP 地址、文件名和路徑名等的格式。此外,您可以查找如 HTML 標(biāo)記、數(shù)字、日期之類(lèi)的模式,或任意文本數(shù)據(jù)中符合任意模式的任何事物,并用其它的模式來(lái)替換它們。

用 Oracle Database 10g 使用正規(guī)表達(dá)式
  您可以使用最新引進(jìn)的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函數(shù)來(lái)發(fā)揮正規(guī)表達(dá)式的作用。您將體會(huì)到這個(gè)新的功能如何對(duì) LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函數(shù)進(jìn)行了補(bǔ)充。實(shí)際上,它們類(lèi)似于已有的操作符,但現(xiàn)在增加了強(qiáng)大的模式匹配功能。被搜索的數(shù)據(jù)可以是簡(jiǎn)單的字符串或是存儲(chǔ)在數(shù)據(jù)庫(kù)字符列中的大量文本。正規(guī)表達(dá)式讓您能夠以一種您以前從未想過(guò)的方式來(lái)搜索、替換和驗(yàn)證數(shù)據(jù),并提供高度的靈活性。

正規(guī)表達(dá)式的基本例子
  在使用這個(gè)新功能之前,您需要了解一些元字符的含義。句號(hào) (.) 匹配一個(gè)正規(guī)表達(dá)式中的任意字符(除了換行符)。例如,正規(guī)表達(dá)式 a.b 匹配的字符串中首先包含字母 a,接著是其它任意單個(gè)字符(除了換行符),再接著是字母 b。字符串 axb、xaybx 和 abba 都與之匹配,因?yàn)樵谧址须[藏了這種模式。如果您想要精確地匹配以 a 開(kāi)頭和以 b 結(jié)尾的一條三個(gè)字母的字符串,則您必須對(duì)正規(guī)表達(dá)式進(jìn)行定位。脫字符號(hào) (^) 元字符指示一行的開(kāi)始,而美元符號(hào) ($) 指示一行的結(jié)尾(參見(jiàn)表1:附表見(jiàn)第4頁(yè))。因此, 正規(guī)表達(dá)式 ^a.b$ 匹配字符串 aab、abb 或 axb。將這種方式與 LIKE 操作符提供的類(lèi)似的模式匹配 a_b 相比較,其中 (_) 是單字符通配符。

  默認(rèn)情況下,一個(gè)正規(guī)表達(dá)式中的一個(gè)單獨(dú)的字符或字符列表只匹配一次。為了指示在一個(gè)正規(guī)表達(dá)式中多次出現(xiàn)的一個(gè)字符,您可以使用一個(gè)量詞,它也被稱(chēng)為重復(fù)操作符。.如果您想要得到從字母 a 開(kāi)始并以字母 b 結(jié)束的匹配模式,則您的正規(guī)表達(dá)式看起來(lái)像這樣:^a.*b$。* 元字符重復(fù)前面的元字符 (.) 指示的匹配零次、一次或更多次。LIKE 操作符的等價(jià)的模式是 a%b,其中用百分號(hào) (%) 來(lái)指示任意字符出現(xiàn)零次、一次或多次。

  表 2 給出了重復(fù)操作符的完整列表。注意它包含了特殊的重復(fù)選項(xiàng),它們實(shí)現(xiàn)了比現(xiàn)有的 LIKE 通配符更大的靈活性。如果您用圓括號(hào)括住一個(gè)表達(dá)式,這將有效地創(chuàng)建一個(gè)可以重復(fù)一定次數(shù)的子表達(dá)式。例如,正規(guī)表達(dá)式 b(an)*a 匹配 ba、bana、banana、yourbananasplit 等。

  Oracle 的正規(guī)表達(dá)式實(shí)施支持 POSIX (可移植操作系統(tǒng)接口)字符類(lèi),參見(jiàn)表 3 中列出的內(nèi)容。這意味著您要查找的字符類(lèi)型可以非常特別。假設(shè)您要編寫(xiě)一條僅查找非字母字符的 LIKE 條件 — 作為結(jié)果的 WHERE 子句可能不經(jīng)意就會(huì)變得非常復(fù)雜。

  POSIX 字符類(lèi)必須包含在一個(gè)由方括號(hào) ([]) 指示的字符列表中。例如,正規(guī)表達(dá)式 [[:lower:]] 匹配一個(gè)小寫(xiě)字母字符,而 [[:lower:]]{5} 匹配五個(gè)連續(xù)的小寫(xiě)字母字符。

  除 POSIX 字符類(lèi)之外,您可以將單獨(dú)的字符放在一個(gè)字符列表中。例如,正規(guī)表達(dá)式 ^ab[cd]ef$ 匹配字符串 abcef 和 abdef。必須選擇 c 或 d。

  除脫字符 (^) 和連字符 (-) 之外,字符列表中的大多數(shù)元字符被認(rèn)為是文字。正規(guī)表達(dá)式看起來(lái)很復(fù)雜,這是因?yàn)橐恍┰址哂须S上下文環(huán)境而定的多重含義。^ 就是這樣一種元字符。如果您用它作為一個(gè)字符列表的第一個(gè)字符,它代表一個(gè)字符列表的非。因此,[^[:digit:]] 查找包含了任意非數(shù)字字符的模式,而 ^[[:digit:]] 查找以數(shù)字開(kāi)始的匹配模式。連字符 (-) 指示一個(gè)范圍,正規(guī)表達(dá)式 [a-m] 匹配字母 a 到字母 m 之間的任意字母。但如果它是一個(gè)字符行中的第一個(gè)字符(如在 [-afg] 中),則它就代表連字符。

  之前的一個(gè)例子介紹了使用圓括號(hào)來(lái)創(chuàng)建一個(gè)子表達(dá)式;它們?cè)试S您通過(guò)輸入更替元字符來(lái)輸入可更替的選項(xiàng),這些元字符由豎線 (|) 分開(kāi)。

  例如,正規(guī)表達(dá)式 t(a|e|i)n 允許字母 t 和 n 之間的三種可能的字符更替。匹配模式包括如 tan、ten、tin 和 Pakistan 之類(lèi)的字,但不包括 teen、mountain 或 tune。作為另一種選擇,正規(guī)表達(dá)式 t(a|e|i)n 也可以表示為一個(gè)字符列表 t[aei]n。表 4 匯總了這些元字符。雖然存在更多的元字符,但這個(gè)簡(jiǎn)明的概述足夠用來(lái)理解這篇文章使用的正規(guī)表達(dá)式。

REGEXP_LIKE 操作符
  REGEXP_LIKE 操作符向您介紹在 Oracle 數(shù)據(jù)庫(kù)中使用時(shí)的正規(guī)表達(dá)式功能。表 5 列出了 REGEXP_LIKE 的語(yǔ)法。

  下面的 SQL 查詢的 WHERE 子句顯示了 REGEXP_LIKE 操作符,它在 ZIP 列中搜索滿足正規(guī)表達(dá)式 [^[:digit:]] 的模式。它將檢索 ZIPCODE 表中的那些 ZIP 列值包含了任意非數(shù)字字符的行。

SELECT zip FROM zipcode WHERE REGEXP_LIKE(zip, '[^[:digit:]]')

ZIP
-----
ab123
123xy
007ab
abcxy

  這個(gè)正規(guī)表達(dá)式的例子僅由元字符組成,更具體來(lái)講是被冒號(hào)和方括號(hào)分隔的 POSIX 字符類(lèi) digit。第二組方括號(hào)(如 [^[:digit:]] 中所示)包括了一個(gè)字符類(lèi)列表。如前文所述,需要這樣做是因?yàn)槟豢梢詫?POSIX 字符類(lèi)用于構(gòu)建一個(gè)字符列表。

REGEXP_INSTR 函數(shù)
  這個(gè)函數(shù)返回一個(gè)模式的起始位置,因此它的功能非常類(lèi)似于 INSTR 函數(shù)。新的 REGEXP_INSTR 函數(shù)的語(yǔ)法在表 6 中給出。這兩個(gè)函數(shù)之間的主要區(qū)別是,REGEXP_INSTR 讓您指定一種模式,而不是一個(gè)特定的搜索字符串;因而它提供了更多的功能。接下來(lái)的示例使用 REGEXP_INSTR 來(lái)返回字符串 Joe Smith, 10045 Berry Lane, San Joseph, CA 91234 中的五位郵政編碼模式的起始位置。如果正規(guī)表達(dá)式被寫(xiě)為 [[:digit:]]{5},則您將得到門(mén)牌號(hào)的起始位置而不是郵政編碼的,因?yàn)?10045 是第一次出現(xiàn)五個(gè)連續(xù)數(shù)字。因此,您必須將表達(dá)式定位到該行的末尾,正如 $ 元字符所示,該函數(shù)將顯示郵政編碼的起始位置,而不管門(mén)牌號(hào)的數(shù)字個(gè)數(shù)。

SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234',
'[[:digit:]]{5}$') AS rx_instr FROM dual

RX_INSTR
----------
45


編寫(xiě)更復(fù)雜的模式
  讓我們?cè)谇耙粋€(gè)例子的郵政編碼模式上展開(kāi),以便包含一個(gè)可選的四位數(shù)字模式。您的模式現(xiàn)在可能看起來(lái)像這樣:[[:digit:]]{5}(-[[:digit:]]{4})?$。如果您的源字符串以 5 位郵政編碼或 5 位 + 4 位郵政編碼的格式結(jié)束,則您將能夠顯示該模式的起始位置。

SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234-1234',
' [[:digit:]]{5}(-[[:digit:]]{4})?$') AS starts_at FROM dual

STARTS_AT
----------
44

  在這個(gè)示例中,括弧里的子表達(dá)式 (-[[:digit:]]{4}) 將按 ? 重復(fù)操作符的指示重復(fù)零次或一次。此外,企圖用傳統(tǒng)的 SQL 函數(shù)來(lái)實(shí)現(xiàn)相同的結(jié)果甚至對(duì) SQL 專(zhuān)家也是一個(gè)挑戰(zhàn)。為了更好地說(shuō)明這個(gè)正規(guī)表達(dá)式示例的不同組成部分,表 7 包含了一個(gè)對(duì)單個(gè)文字和元字符的描述。

REGEXP_SUBSTR 函數(shù)
  類(lèi)似于 SUBSTR 函數(shù)的 REGEXP_SUBSTR 函數(shù)用來(lái)提取一個(gè)字符串的一部分。表 8 顯示了這個(gè)新函數(shù)的語(yǔ)法。在下面的示例中,匹配模式 [^,]* 的字符串將被返回。該正規(guī)表達(dá)式搜索其后緊跟著空格的一個(gè)逗號(hào);然后按 [^,]* 的指示搜索零個(gè)或更多個(gè)不是逗號(hào)的字符,最后查找另一個(gè)逗號(hào)。這種模式看起來(lái)有點(diǎn)像一個(gè)用逗號(hào)分隔的值字符串。

SELECT REGEXP_SUBSTR('first field, second field , third field', ', [^,]*,') FROM dual

REGEXP_SUBSTR('FIR
------------------
, second field ,


REGEXP_REPLACE 函數(shù)
  讓我們首先看一下傳統(tǒng)的 REPLACE SQL 函數(shù),它把一個(gè)字符串用另一個(gè)字符串來(lái)替換。假設(shè)您的數(shù)據(jù)在正文中有不必要的空格,您希望用單個(gè)空格來(lái)替換它們。利用 REPLACE 函數(shù),您需要準(zhǔn)確地列出您要替換多少個(gè)空格。然而,多余空格的數(shù)目在正文的各處可能不是相同的。下面的示例在 Joe 和 Smith 之間有三個(gè)空格。REPLACE 函數(shù)的參數(shù)指定要用一個(gè)空格來(lái)替換兩個(gè)空格。在這種情況下,結(jié)果在原來(lái)的字符串的 Joe 和 Smith 之間留下了一個(gè)額外的空格。

SELECT REPLACE('Joe Smith',' ', ' ') AS replace FROM dual

REPLACE
---------
Joe Smith

  REGEXP_REPLACE 函數(shù)把替換功能向前推進(jìn)了一步,其語(yǔ)法在表 9 中列出。以下查詢用單個(gè)空格替換了任意兩個(gè)或更多的空格。( ) 子表達(dá)式包含了單個(gè)空格,它可以按 {2,} 的指示重復(fù)兩次或更多次。
SELECT REGEXP_REPLACE('Joe Smith', '( ){2,}', ' ') AS RX_REPLACE FROM dual

RX_REPLACE
----------
Joe Smith

后向引用   正則表達(dá)式的一個(gè)有用的特性是能夠存儲(chǔ)子表達(dá)式供以后重用;這也被稱(chēng)為后向引用(在表 10 中對(duì)其進(jìn)行了概述)。它允許復(fù)雜的替換功能,如在新的位置上交換模式或顯示重復(fù)出現(xiàn)的單詞或字母。子表達(dá)式的匹配部分保存在臨時(shí)緩沖區(qū)中。緩沖區(qū)從左至右進(jìn)行編號(hào),并利用 \digit 符號(hào)進(jìn)行訪問(wèn),其中 digit 是 1 到 9 之間的一個(gè)數(shù)字,它匹配第 digit 個(gè)子表達(dá)式,子表達(dá)式用一組圓括號(hào)來(lái)顯示。

  接下來(lái)的例子顯示了通過(guò)按編號(hào)引用各個(gè)子表達(dá)式將姓名 Ellen Hildi Smith 轉(zhuǎn)變?yōu)?Smith, Ellen Hildi。

SELECT REGEXP_REPLACE(
'Ellen Hildi Smith',
'(.*) (.*) (.*)', '\3, \1 \2')
FROM dual

REGEXP_REPLACE('EL
------------------
Smith, Ellen Hildi

  該 SQL 語(yǔ)句顯示了用圓括號(hào)括住的三個(gè)單獨(dú)的子表達(dá)式。每一個(gè)單獨(dú)的子表達(dá)式包含一個(gè)匹配元字符 (.),并緊跟著 * 元字符,表示任何字符(除換行符之外)都必須匹配零次或更多次??崭駥⒏鱾€(gè)子表達(dá)式分開(kāi),空格也必須匹配。圓括號(hào)創(chuàng)建獲取值的子表達(dá)式,并且可以用 \digit 來(lái)引用。第一個(gè)子表達(dá)式被賦值為 \1 ,第二個(gè) \2,以此類(lèi)推。這些后向引用被用在這個(gè)函數(shù)的最后一個(gè)參數(shù) (\3, \1 \2) 中,這個(gè)函數(shù)有效地返回了替換子字符串,并按期望的格式來(lái)排列它們(包括逗號(hào)和空格)。表 11 詳細(xì)說(shuō)明了該正則表達(dá)式的各個(gè)組成部分。

  后向引用對(duì)替換、格式化和代替值非常有用,并且您可以用它們來(lái)查找相鄰出現(xiàn)的值。接下來(lái)的例子顯示了使用 REGEP_SUBSTR 函數(shù)來(lái)查找任意被空格隔開(kāi)的重復(fù)出現(xiàn)的字母數(shù)字值。顯示的結(jié)果給出了識(shí)別重復(fù)出現(xiàn)的單詞 is 的子字符串。
SELECT REGEXP_SUBSTR(
'The final test is is the implementation',
'([[:alnum:]]+)([[:space:]]+)\1') AS substr
FROM dual

SUBSTR
------
is is


匹配參數(shù)選項(xiàng)
  您可能已經(jīng)注意到了正則表達(dá)式操作符和函數(shù)包含一個(gè)可選的匹配參數(shù)。這個(gè)參數(shù)控制是否區(qū)分大小寫(xiě)、換行符的匹配和保留多行輸入。

正則表達(dá)式的實(shí)際應(yīng)用
  您不僅可以在隊(duì)列中使用正則表達(dá)式,還可以在使用 SQL 操作符或函數(shù)的任何地方(比如說(shuō)在 PL/SQL 語(yǔ)言中)使用正則表達(dá)式。您可以編寫(xiě)利用正則表達(dá)式功能的觸發(fā)器,以驗(yàn)證、生成或提取值。

  接下來(lái)的例子演示了您如何能夠在一次列檢查約束條件中應(yīng)用 REGEXP_LIKE 操作符來(lái)進(jìn)行數(shù)據(jù)驗(yàn)證。它在插入或更新時(shí)檢驗(yàn)正確的社會(huì)保險(xiǎn)號(hào)碼格式。如 123-45-6789 和 123456789 之類(lèi)格式的社會(huì)保險(xiǎn)號(hào)碼對(duì)于這種列約束條件是可接受的值。有效的數(shù)據(jù)必須以三個(gè)數(shù)字開(kāi)始,緊跟著一個(gè)連字符,再加兩個(gè)數(shù)字和一個(gè)連字符,最后又是四個(gè)數(shù)字。另一種表達(dá)式只允許 9 個(gè)連續(xù)的數(shù)字。豎線符號(hào) (|) 將各個(gè)選項(xiàng)分開(kāi)。

ALTER TABLE students
ADD CONSTRAINT stud_ssn_ck CHECK
(REGEXP_LIKE(ssn,
'^([[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{4}|[[:digit:]]{9})$'))

  由 ^ 和 $ 指示的開(kāi)頭或結(jié)尾的字符都是不可接受的。確保您的正則表達(dá)式?jīng)]有分成多行或包含任何不必要的空格,除非您希望格式如此并相應(yīng)地進(jìn)行匹配。表 12 說(shuō)明了該正則表達(dá)式示例的各個(gè)組成部分。

將正則表達(dá)式與現(xiàn)有的功能進(jìn)行比較
  正則表達(dá)式有幾個(gè)優(yōu)點(diǎn)優(yōu)于常見(jiàn)的 LIKE 操作符和 INSTR、SUBSTR 及 REPLACE 函數(shù)的。這些傳統(tǒng)的 SQL 函數(shù)不便于進(jìn)行模式匹配。只有 LIKE 操作符通過(guò)使用 % 和 _ 字符匹配,但 LIKE 不支持表達(dá)式的重復(fù)、復(fù)雜的更替、字符范圍、字符列表和 POSIX 字符類(lèi)等等。此外,新的正則表達(dá)式函數(shù)允許檢測(cè)重復(fù)出現(xiàn)的單詞和模式交換。這里的例子為您提供了正則表達(dá)式領(lǐng)域的一個(gè)概覽,以及您如何能夠在您的應(yīng)用程序中使用它們。

實(shí)實(shí)在在地豐富您的工具包
  因?yàn)檎齽t表達(dá)式有助于解決復(fù)雜的問(wèn)題,所以它們是非常強(qiáng)大的。正則表達(dá)式的一些功能難于用傳統(tǒng)的 SQL 函數(shù)來(lái)仿效。當(dāng)您了解了這種稍顯神秘的語(yǔ)言的基礎(chǔ)構(gòu)建程序塊時(shí),正則表達(dá)式將成為您的工具包的不可缺少的一部分(不僅在 SQL 環(huán)境下也在其它的編程語(yǔ)言環(huán)境下)。為了使您的各個(gè)模式正確,雖然嘗試和錯(cuò)誤有時(shí)是必須的,但正則表達(dá)式的簡(jiǎn)潔和強(qiáng)大是不容置疑的。
附表見(jiàn)下頁(yè):
表 1:定位元字符
元字符 說(shuō)明
^ 使表達(dá)式定位至一行的開(kāi)頭
$ 使表達(dá)式定位至一行的末尾

表 2:量詞或重復(fù)操作符 量詞 說(shuō)明
* 匹配 0 次或更多次
? 匹配 0 次或 1 次
+ 匹配 1 次或更多次
{m} 正好匹配 m 次
{m,} 至少匹配 m 次
{m, n} 至少匹配 m 次但不超過(guò) n 次


表 3:預(yù)定義的 POSIX 字符類(lèi) 字符類(lèi) 說(shuō)明
[:alpha:] 字母字符
[:lower:] 小寫(xiě)字母字符
[:upper:] 大寫(xiě)字母字符
[:digit:] 數(shù)字
[:alnum:] 字母數(shù)字字符
[:space:] 空白字符(禁止打?。缁剀?chē)符、換行符、豎直制表符和換頁(yè)符
[:punct:] 標(biāo)點(diǎn)字符
[:cntrl:] 控制字符(禁止打?。?
[:print:] 可打印字符


表 4:表達(dá)式的替換匹配和分組 元字符 說(shuō)明
| 替換 分隔替換選項(xiàng),通常與分組操作符 () 一起使用
( ) 分組 將子表達(dá)式分組為一個(gè)替換單元、量詞單元或后向引用單元(參見(jiàn)“后向引用”部分)
[char] 字符列表 表示一個(gè)字符列表;一個(gè)字符列表中的大多數(shù)元字符(除字符類(lèi)、^ 和 - 元字符之外)被理解為文字


表 5:REGEXP_LIKE 操作符 語(yǔ)法 說(shuō)明
REGEXP_LIKE(source_string, pattern
[, match_parameter]) source_string 支持字符數(shù)據(jù)類(lèi)型(CHAR、VARCHAR2、CLOB、NCHAR、NVARCHAR2 和 NCLOB,但不包括 LONG)。pattern 參數(shù)是正則表達(dá)式的另一個(gè)名稱(chēng)。match_parameter 允許可選的參數(shù)(如處理?yè)Q行符、保留多行格式化以及提供對(duì)區(qū)分大小寫(xiě)的控制)。


表 6:REGEXP_INSTR 函數(shù) 語(yǔ)法 說(shuō)明
REGEXP_INSTR(source_string, pattern
[, start_position
[, occurrence
[, return_option
[, match_parameter]]]]) 該函數(shù)查找 pattern ,并返回該模式的第一個(gè)位置。您可以隨意指定您想要開(kāi)始搜索的 start_position。 occurrence 參數(shù)默認(rèn)為 1,除非您指定您要查找接下來(lái)出現(xiàn)的一個(gè)模式。return_option 的默認(rèn)值為 0,它返回該模式的起始位置;值為 1 則返回符合匹配條件的下一個(gè)字符的起始位置。


表 7: 5 位數(shù)字加 4 位郵政編碼表達(dá)式的說(shuō)明 語(yǔ)法 說(shuō)明
 必須匹配的空白
[:digit:] POSIX 數(shù)字類(lèi) 
] 字符列表的結(jié)尾 
{5} 字符列表正好重復(fù)出現(xiàn) 5 次
( 子表達(dá)式的開(kāi)頭 
- 一個(gè)文字連字符,因?yàn)樗皇且粋€(gè)字符列表內(nèi)的范圍元字符
[ 字符列表的開(kāi)頭 
[:digit:] POSIX [:digit:]類(lèi)
[ 字符列表的開(kāi)頭 
] 字符列表的結(jié)尾
{4} 字符列表正好重復(fù)出現(xiàn) 4 次 
) 結(jié)束圓括號(hào),結(jié)束子表達(dá)式 
? ? 量詞匹配分組的子表達(dá)式 0 或 1 次,從而使得 4 位代碼可選
$ 定位元字符,指示行尾


表 8:REGEXP_SUBSTR 函數(shù) 語(yǔ)法 說(shuō)明
REGEXP_SUBSTR(source_string, pattern
[, position [, occurrence
[, match_parameter]]]) REGEXP_SUBSTR 函數(shù)返回匹配模式的子字符串。


表 9: REGEXP_REPLACE 函數(shù) 語(yǔ)法 說(shuō)明
REGEXP_REPLACE(source_string, pattern
[, replace_string [, position
[,occurrence, [match_parameter]]]]) 該函數(shù)用一個(gè)指定的 replace_string 來(lái)替換匹配的模式,從而允許復(fù)雜的“搜索并替換”操作。


表 10:后向引用元字符 元字符 說(shuō)明
\digit 反斜線 緊跟著一個(gè) 1 到 9 之間的數(shù)字,反斜線匹配之前的用括號(hào)括起來(lái)的第 digit 個(gè)子表達(dá)式。
(注意:反斜線在正則表達(dá)式中有另一種意義,取決于上下文,它還可能表示 Escape 字符。


表 11:模式交換正則表達(dá)式的說(shuō)明 正則表達(dá)式項(xiàng)目 說(shuō)明
( 第一個(gè)子表達(dá)式的開(kāi)頭 
. 匹配除換行符之外的任意單字符
* 重復(fù)操作符,匹配之前的 . 元字符 0 到 n 次
) 第一個(gè)子表達(dá)式的結(jié)尾;匹配結(jié)果在 \1
中獲?。ㄔ谶@個(gè)例子中,結(jié)果為 Ellen。)
 必須存在的空白 
( 第二個(gè)子表達(dá)式的開(kāi)頭 
. 匹配除換行符之外的任意單個(gè)字符 
* 重復(fù)操作符,匹配之前的 . 元字符 0 到 n 次
) 第二個(gè)子表達(dá)式的結(jié)尾;匹配結(jié)果在 \2
中獲?。ㄔ谶@個(gè)例子中,結(jié)果為 Hildi。)
 空白 
( 第三個(gè)子表達(dá)式的開(kāi)頭 
. 匹配除換行符之外的任意單字符 
* 重復(fù)操作符,匹配之前的 . 元字符 0 到 n 次
) 第三個(gè)子表達(dá)式的結(jié)尾;匹配結(jié)果在 \3
中獲?。ㄔ谶@個(gè)例子中,結(jié)果為 Smith。)


表 12:社會(huì)保險(xiǎn)號(hào)碼正則表達(dá)式的說(shuō)明 正則表達(dá)式項(xiàng)目 說(shuō)明
^ 行首字符(正則表達(dá)式在匹配之前不能有任何前導(dǎo)字符。)
( 開(kāi)始子表達(dá)式并列出用 | 元字符分開(kāi)的可替換選項(xiàng)
[ 字符列表的開(kāi)頭
[:digit:] POSIX 數(shù)字類(lèi) 
] 字符列表的結(jié)尾 
{3} 字符列表正好重復(fù)出現(xiàn) 3 次 
- 連字符 
[ 字符列表的開(kāi)頭 
[:digit:] POSIX 數(shù)字類(lèi)
] 字符列表的結(jié)尾 
{2} 字符列表正好重復(fù)出現(xiàn) 2 次 
- 另一個(gè)連字符 
[ 字符列表的開(kāi)頭 
[:digit:] POSIX 數(shù)字類(lèi) 
] 字符列表的結(jié)尾 
{4} 字符列表正好重復(fù)出現(xiàn) 4 次 
| 替換元字符;結(jié)束第一個(gè)選項(xiàng)并開(kāi)始下一個(gè)替換表達(dá)式
[ 字符列表的開(kāi)頭 
[:digit:] POSIX 數(shù)字類(lèi)
] 字符列表的結(jié)尾
{9} 字符列表正好重復(fù)出現(xiàn) 9 次 
) 結(jié)束圓括號(hào),結(jié)束用于替換的子表達(dá)式組
$ 定位元字符,指示行尾;沒(méi)有額外的字符能夠符合模式 

您可能感興趣的文章:
  • Oracle通過(guò)正則表達(dá)式分割字符串 REGEXP_SUBSTR的代碼詳解
  • Oracle中正則表達(dá)式的使用實(shí)例教程
  • Oracle 正則表達(dá)式實(shí)例詳解
  • ORACLE數(shù)據(jù)庫(kù)中怎么求除數(shù)字、字母之外的非中文字符的正則表達(dá)式
  • oracle正則表達(dá)式regexp_like的用法詳解
  • Oracle正則表達(dá)式使用介紹
  • ORACLE 正則解決初使化數(shù)據(jù)格式不一致
  • Oracle數(shù)據(jù)庫(kù)正則表達(dá)式使用場(chǎng)景代碼實(shí)例

標(biāo)簽:通遼 包頭 潮州 定西 淮北 溫州 衢州 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)》,本文關(guān)鍵詞  Oracle,10G,SQL,正規(guī),表達(dá)式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章