字元類
比對的字元
舉例
\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 位置和順序
¦ “或”操作