SQL 中的正則函數

來源:互聯網
上載者:User

SQL 中的正則函數

Oracle中支援Regex的函數主要有下面四個:
1,REGEXP_LIKE :與LIKE的功能相似,比LIKE強大得多。
2,REGEXP_INSTR :與INSTR的功能相似。
3,REGEXP_SUBSTR :與SUBSTR的功能相似。
4,REGEXP_REPLACE :與REPLACE的功能相似。

REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函數(10g新函數)
描述:字串替換函數。相當於增強replace函數。Source_string指定源字元運算式;pattern指定規則運算式;replace_string指定用於替換的字串;position指定起始搜尋位置;occurtence指定替換出現的第n個字串;match_parameter指定預設匹配操作的文本串。ITPUB個人空間.x mz\ n`r­g9[1`
  其中replace_string,position,occurtence,match_parameter參數都是可選的。

REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函數(10g新函數)
描述:返回匹配模式的子字串。相當於增強substr函數。Source_string指定源字元運算式;pattern指定規則運算式;position指定起始搜尋位置;occurtence指定替換出現的第n個字串;match_parameter指定預設匹配操作的文本串。
   其中position,occurtence,match_parameter參數都是可選的。

match_option的取值如下:
  'c'   說明在進行匹配時區分大小寫(預設值);
  'i'    說明在進行匹配時不區分大小寫;
  'n'  允許使用可以匹配任一字元的操作符;
  'm'  將x作為一個包含多行的字串。

REGEXP_LIKE(source_string, pattern[, match_parameter])函數(10g新函數)
描述:返回滿足匹配模式的字串。相當於增強like函數。Source_string指定源字元運算式;pattern指定規則運算式;match_parameter指定預設匹配操作的文本串。
   其中position,occurtence,match_parameter參數都是可選的。

REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函數(10g新函數)
描述: 該函數尋找 pattern ,並返回該模式的第一個位置。您可以隨意指定您想要開始搜尋的 start_position。 occurrence 參數預設為 1,除非您指定您要尋找接下來出現的一個模式。return_option 的預設值為 0,它返回該模式的起始位置;值為 1 則返回符合匹配條件的下一個字元的起始位置。

 

一.     匹配字元

 

二.     重複字元

 

三.     定位字元

 

註:定位字元可以應用於字元或組合,放在字串的左端或右端

四.     分組字元

分組字元

定 義

舉 例

()

此字元可以組合括弧內模式所匹配的字元,它是一個擷取的群組,也就是說模式比對的字元作為最終設定了ExplicitCapture選項――預設狀態下字元不是匹配的一部分

輸入字串為:ABC1DEF2XY

匹配3個從A到Z的字元和1個數位Regex:([A-Z]{3}\d)

將產生兩次匹配:Match 1=ABC1;Match 2=DEF2

每次匹配對應一個組:Match1的第一個組=ABC;Match2的第1個組=DEF

有了反向引用,就可以通過它在Regex中的編號以及C#和類Group,GroupCollection來訪問組。如果設定了ExplicitCapture選項,就不能使用組所捕獲的內容

(?:)

此字元可以組合括弧內模式所匹配的字元,它是一個非擷取的群組,這意味著模式所的字元將不作為一個組來捕獲,但它構成了最終匹配結果的一部分。它基本上與上面的群組類型相同,但設定了選項ExplicitCapture

輸入字串為:1A BB SA1 C

匹配一個數字或一個A到Z的字母,接著是任意單詞字元的Regex為:(?:\d|[A-Z]\w)

它將產生3次匹配:每1次匹配=1A;每2次匹配=BB;每3次匹配=SA

但是沒有組被捕獲

(?<name>)

此選項組合括弧內模式所匹配的字元,並用角括弧中指定的值為組命名。在Regex中,可以使用名稱進行反向引用,而不必使用編號。即使不設定ExplicitCapture選項,它也是一個擷取的群組。這意味著反向引用可以利用組內匹配的字元,或者通過Group類訪問

輸入字串為:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能夠匹配它們的姓名,並在一個組llastName中捕獲姓的Regex為:\b[A-Z][a-z]+(?<lastName>[A-Z][a-z]+)\b

它產生了4次匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza

每一次匹配都對應了一個lastName組:

第1次匹配:lastName group=Seinfeld

第2次匹配:lastName group=Benes

第3次匹配:lastName group=Kramer

第4次匹配:lastName group=Costanza

不管是否設定了選項ExplictCapture,組都將被捕獲

(?=)

正聲明。聲明的右側必須是括弧中指定的模式。此模式不構成最終匹配的一部分

Regex\S+(?=.NET)要匹配的輸入字串為:The languages were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal

將產生如下匹配:〕

C#

VB

JScript.

(?!)

負聲明。它規定模式不能緊臨著聲明的右側。此模式不構成最終匹配的一部分

\d{3}(?![A-Z])要匹配的輸入字串為:123A 456 789111C

將產生如下匹配:

456

789

(?<=)

反向正聲明。聲明的左側必須為括弧內的指定模式。此模式不構成最終匹配的一部分

Regex(?<=New)([A-Z][a-z]+)要匹配的輸入字串為:The following states,New Mexico,West Virginia,Washington, New England

它將產生如下匹配:

Mexico

England

(?<!)

反向正聲明。聲明的左側必須不能是括弧內的指定模式。此模式不構成最終匹配的一部分

Regex(?<!1)\d{2}([A-Z])要匹配的輸入字串如下:123A456F789C111A

它將實現如下匹配:

56F

89C

(?>)

非回溯組。防止Regex引擎回溯並且防止實現一次匹配

假設要匹配所有以“ing”結尾的單詞。輸入字串如下:He was very trusing

Regex為:.*ing

它將實現一次匹配――單詞trusting。“.”匹配任一字元,當然也匹配“ing”。所以,Regex引擎回溯一位並在第2個“t”停止,然後匹配指定的模式“ing”。但是,如果禁用回溯操作:(?>.*)ing

它將實現0次匹配。“.”能匹配所有的字元,包括“ing”――不能匹配,從而匹配失敗

 

五.     決策字元

註:上面表中列出的字元強迫處理器執行一次if-else決策

六.     替換字元

註:以上為常用替換字元,不全

七.     逸出序列

 

八.     選項標誌

 

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.