天天看點

正規表達式的支援

字元類

比對的字元

舉例

\d

從0-9的任一數字

\d\d:比對72,但不比對aa或7a

\D

任一非數字字元

\D\D\D:比對abc,但不比對123

\w

任一單詞字元,包括A-Z,a-z,0-9和下劃線

\w\w\w\w:比對Ab-2,但不比對∑£$%*或Ab_@

\W

任一非單詞字元

\W比對@,但不比對a

\s

任一空白字元,包括制表符,換行符,回車符,換頁符和垂直制表符

比對在HTML,XML和其他标準定義中的所有傳統空白字元

\S

任一非空白字元

空白字元以外的任意字元,如A%&g3;等

.

任一字元

比對除換行符以外的任意字元除非設定了MultiLine先項

[…]

括号中的任一字元

[abc]:将比對一個單字元,a,b或c.

[a-z]:将比對從a到z的任一字元

[^…]

不在括号中的任一字元

[^abc]:将比對一個a、b、c之外的單字元,可以a,b或A、B、C

[^a-z]将比對不屬于a-z的任一字元,但可以比對所有的大寫字母

重複字元

含義

{n}

比對前面的字元n次

x{2}比對xx,但不比對x或xxx

{n,}

比對前面的字元至少n次

x{2}比對2個或更多的x,如xxx,xxx..

{n,m}

比對前面的字元至少n次,至多m次。如果n為0,此參數為可選參數

x{2,4}比對xx,xxx,xxxx,但不比對xxxxx

?

比對前面的字元0次或1次,實質上也是可選的

x?比對x或零個x

+

比對前面的字元0次或多次

x+比對x或xx或大于0的任意多個x

*

比對前面的字元0次或更多次

x*比對0,1或更多個x

定位字元

描述

^

随後的模式必須位于字元串的開始位置,如果是一個多行字元串,則必須位于行首。對于多行文本(包含回車符的一個字元串)來說,需要設定多行标志

$

前面的模式必須位于字元串的未端,如果是一個多行字元串,必須位于行尾

\A

前面的模式必須位于字元串的開始位置,忽略多行标志

\z

前面的模式必須位于字元串的未端,忽略多行标志

\Z

前面的模式必須位于字元串的未端,或者位于一個換行符前

\b

比對一個單詞邊界,也就是一個單詞字元和非單詞字元中間的點。要記住一個單詞字元是[a-zA-Z0-9]中的一個字元。位于一個單詞的詞首

\B

比對一個非單詞字元邊界位置,不是一個單詞的詞首

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

分組字元

定義

()

此字元可以組合括号内模式所比對的字元,它是一個捕獲組,也就是說模式比對的字元作為最終設定了ExplicitCapture選項――預設狀态下字元不是比對的一部分

輸入字元串為:ABC1DEF2XY

比對3個從A到Z的字元和1個數字的正規表達式:([A-Z]{3}\d)

将産生兩次比對:Match 1=ABC1;Match 2=DEF2每次比對對應一個組:Match1的第一個組=ABC;Match2的第1個組=DEF

有了反向引用,就可以通過它在正規表達式中的編号以及C#和類Group,GroupCollection來通路組。如果設定了ExplicitCapture選項,就不能使用組所捕獲的内容

(?:)

此字元可以組合括号内模式所比對的字元,它是一個非捕獲組,這意味着模式所的字元将不作為一個組來捕獲,但它構成了最終比對結果的一部分。它基本上與上面的組類型相同,但設定了選項ExplicitCapture

輸入字元串為:1A BB SA1 C

比對一個數字或一個A到Z的字母,接着是任意單詞字元的正規表達式為:(?:\d|[A-Z]\w)

它将産生3次比對:每1次比對=1A;每2次比對=BB;每3次比對=SA但是沒有組被捕獲

(?<name>)

此選項組合括号内模式所比對的字元,并用尖括号中指定的值為組命名。在正規表達式中,可以使用名稱進行反向引用,而不必使用編号。即使不設定ExplicitCapture選項,它也是一個捕獲組。這意味着反向引用可以利用組内比對的字元,或者通過Group類通路

輸入字元串為:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能夠比對它們的姓名,并在一個組llastName中捕獲姓的正規表達式為:\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,組都将被捕獲

(?=)

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

正規表達式\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

(?<=)

反向正聲明。聲明的左側必須為括号内的指定模式。此模式不構成最終比對的一部分

正規表達式(?<=New)([A-Z][a-z]+)要比對的輸入字元串為:The following states,New Mexico,West Virginia,Washington, New England

它将産生如下比對:

Mexico

England

(?<!)

反向正聲明。聲明的左側必須不能是括号内的指定模式。此模式不構成最終比對的一部分

正規表達式(?<!1)\d{2}([A-Z])要比對的輸入字元串如下:123A456F789C111A

它将實作如下比對:

56F

89C

(?>)

非回溯組。防止Regex引擎回溯并且防止實作一次比對

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

正規表達式為:.*ing

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

它将實作0次比對。“.”能比對所有的字元,包括“ing”――不能比對,進而比對失敗

字元

(?(regex)yes_regex|no_regex)

如果表達式regex比對,那麼将試圖比對表達式yes。否則比對表達式no。正規表達式no是可先參數。注意,作出決策的模式寬度為0.這意味着表達式yes或no将從與regex表達式相同的位置開始比對

正規表達式(?(\d)dA|A-Z)B)要比對的輸入字元串為:1A CB3A5C 3B它實作的比對是:1ACB3A

(?(group name or number)yes_regex|no_regex)

如果組中的正規表達式實作了比對,那麼試圖比對yes正規表達式。否則,試圖比對正規表達式no。no是可先的參數

正規表達式(\d7)?-(?(1)\d\d[A-Z]|[A-Z][A-Z]要比對的輸入字元串為:77-77A 69-AA 57-B

它實作的比對為:

77-77A

-AA

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

$group

用group指定的組号替換

${name}

替換被一個(?<name>)組比對的最後子串

$$

替換一個字元$

$&

替換整個的比對

$^

替換輸入字元串比對之前的所有文本

$’

替換輸入字元串比對之後的所有文本

$+

替換最後捕獲的組

$_

替換整個的輸入字元串注:以上為常用替換字元,不全

\\

比對字元“\”

\.

比對字元“.”

\*

比對字元“*”

\+

比對字元“+”

\?

比對字元“?”

\|

比對字元“|”

\(

比對字元“(”

\)

比對字元“)”

\{

比對字元“{”

\}

比對字元“}”

\^

比對字元“^”

\$

比對字元“$”

\n

比對換行符

\r

比對回車符

\t

比對制表符

\v

比對垂直制表符

\f

比對換面符

\nnn

比對一個8進數字,nnn指定的ASCII字元。如\103比對大寫的C

\xnn

比對一個16進數字,nn指定的ASCII字元。如\x43比對大寫的C

\unnnn

比對由4位16進數字(由nnnn表示)指定的Unicode字元

\cV

比對一個控制字元,如\cV比對Ctrl-V

選項标志

名稱

I

IgnoreCase

M

Multiline

N

ExplicitCapture

S

SingleLine

X

IgnorePatternWhitespace

注:選項本身的信作含義如下表所示:

标志

使模式比對不區分大小寫。預設的選項是比對區分大小寫

RightToLeft

從右到左搜尋輸入字元串。預設是從左到右以符合英語等的閱讀習慣,但不符合阿拉伯語或希伯來語的閱讀習慣

None

不設定标志。這是預設選項

指定^和$可以比對行首和行尾,以及字元串的開始和結尾。這意味着可以比對每個用換行符分隔的行。但是,字元“.”仍然不比對換行符

規定特殊字元“.”比對任意的字元,包括換行符。預設情況下,特殊字元“.”不比對換行符。通常與MultiLine選項一起使用

ECMAScript.

ECMA(European Coputer Manufacturer’s Association,歐洲計算機生産商協會)已經定義了正規表達式應該如何實作,而且已經在ECMAScript規範中實作,這是一個基于标準的JavaScript。這個選項隻能與IgnoreCase和MultiLine标志一起使用。與其它任何标志一起使用,ECMAScript都将産生異常

此選項從使用的正規表達式模式中删除所有非轉義空白字元。它使表達式能跨越多行文本,但必須確定對模式中所有的空白進行轉義。如果設定了此選項,還可以使用“#”字元來注釋下則表達式

Complied

它把正規表達式編譯為更接近機器代碼的代碼。這樣速度快,但不允許對它進行任何修改

測試資料 

函數

說明

REGEXP_LIKE

文法:

說明:傳回滿足比對模式的字元串。相當于增強的like函數。

 Source_string指定源字元表達式;

 pattern指定規則表達式;

 match_parameter指定預設比對操作的文本串。

其中position,occurtence,match_parameter參數都是可選的

例句:

REGEXP_INSTR

說明:該函數查找 pattern,并傳回該模式的第一個位置。您可以随意指定您想要開始搜尋的 start_position。 

 occurrence 參數預設為 1,除非您指定您要查找接下來出現的一個模式。

 return_option 的預設值為 0,它傳回該模式的起始位置;值為 1 則傳回符合比對條件的下一個字元的起始位置

REGEXP_SUBSTR

說明:傳回比對模式的子字元串。相當于增強的substr函數。

 position指定起始搜尋位置;

 occurtence指定替換出現的第n個字元串;

match_option的取值如下:

 ‘c’  說明在進行比對時區分大小寫(預設值);

 'i'  說明在進行比對時不區分大小寫;

 'n'  允許使用可以比對任意字元的操作符;

 'm'  将x作為一個包含多行的字元串。

REGEXP_REPLACE

說明:字元串替換函數。相當于增強的replace函數。

 replace_string指定用于替換的字元串;

其中replace_string,position,occurtence,match_parameter參數都是可選的。

特殊字元:

 '^' 比對輸入字元串的開始位置,在方括号表達式中使用,此時它表示不接受該字元集合。

 '$' 比對輸入字元串的結尾位置。如果設定了 RegExp 對象的 Multiline 屬性,則 $ 也比對 'n' 或 'r'。

 '.' 比對除換行符 n之外的任何單字元。

 '?' 比對前面的子表達式零次或一次。

 '*' 比對前面的子表達式零次或多次。

 '+' 比對前面的子表達式一次或多次。

 '( )' 标記一個子表達式的開始和結束位置。

 '[]' 标記一個中括号表達式。

 '{m,n}' 一個精确地出現次數範圍,m= <出現次數 <=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。

 ' ¦' 指明兩項之間的一個選擇。例子'^([a-z]+ ¦[0-9]+)$'表示所有小寫字母或數字組合成的字元串。

 num 比對 num,其中 num 是一個正整數。對所擷取的比對的引用。

字元簇: 

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

 [[:digit:]] 任何數字。

 [[:alnum:]] 任何字母和數字。

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

 [[:upper:]] 任何大寫字母。

 [[:lower:]] 任何小寫字母。

 [[:punct:]] 任何标點符号。

 [[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]。各種操作符的運算優先級

轉義符

 (), (?:), (?=), [] 圓括号和方括号

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

 ^, $, anymetacharacter 位置和順序

 ¦ “或”操作

下一篇: 條件和排序

繼續閱讀