共計 7701 個字符,預計需要花費 20 分鐘才能閱讀完成。
這篇文章主要介紹了正則表達式支持的字符有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
一、匹配字符
字符類
匹配的字符
從0-9的任一數字
\d\d:匹配 72, 但不匹配 aa 或 7a
任一非數字字符
\D\D\D:匹配 abc, 但不匹配 123
任一單詞字符,包括 A -Z,a-z,0- 9 和下劃線
\w\w\w\w:匹配 Ab-2,但不匹配∑?$%* 或 Ab_@
任一非單詞字符
\W 匹配@,但不匹配 a
任一空白字符,包括制表符,換行符,回車符,換頁符和垂直制表符
匹配在 HTML,XML 和其他標準定義中的所有傳統空白字符
任一非空白字符
空白字符以外的任意字符, 如 A% 等
任一字符
匹配除換行符以外的任意字符除非設置了 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-zA-Z0-9] 中的一個字符。位于一個單詞的詞首
匹配一個非單詞字符邊界位置,不是一個單詞的詞首
注:定位字符可以應用于字符或組合,放在字符串的左端或右端
四、分組字符
分組字符
此字符可以組合括號內模式所匹配的字符,它是一個捕獲組,也就是說模式匹配的字符作為最終設置了 ExplicitCapture 選項――默認狀態下字符不是匹配的一部分
輸入字符串為:ABC1DEF2XY
匹配 3 個從 A 到 Z 的字符和 1 個數字的正則表達式:([A-Z]{3}\d)
將產生兩次匹配:Match 1=ABC1;Match 2=DEF2 每次匹配對應一個組:Match2 的第一個組=ABC;Match3 的第 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) 組匹配的最后子串
替換一個字符 $
替換整個的匹配
替換輸入字符串匹配之前的所有文本
替換輸入字符串匹配之后的所有文本
替換最后捕獲的組
替換整個的輸入字符串注:以上為常用替換字符,不全
七、轉義序列
匹配字符“\”
匹配字符“.”
匹配字符“*”
匹配字符“+”
匹配字符“?”
匹配字符“|”
匹配字符“(”
匹配字符“)”
匹配字符“{”
匹配字符“}”
匹配字符“^”
匹配字符“$”
匹配換行符
匹配回車符
匹配制表符
匹配垂直制表符
匹配換面符
\nnn
匹配一個 8 進數字,nnn 指定的 ASCII 字符。如 \103 匹配大寫的 C
\xnn
匹配一個 16 進數字,nn 指定的 ASCII 字符。如 \x43 匹配大寫的 C
\unnnn
匹配由 4 位 16 進數字(由 nnnn 表示)指定的 Unicode 字符
\cV
匹配一個控制字符,如 \cV 匹配 Ctrl-V
八、選項標志
選項標志
IgnoreCase
Multiline
ExplicitCapture
SingleLine
IgnorePatternWhitespace
注:選項本身的信作含義如下表所示:
IgnoreCase
使模式匹配不區分大小寫。默認的選項是匹配區分大小寫
RightToLeft
從右到左搜索輸入字符串。默認是從左到右以符合英語等的閱讀習慣,但不符合阿拉伯語或希伯來語的閱讀習慣
None
不設置標志。這是默認選項
Multiline
指定 ^ 和 $ 可以匹配行首和行尾,以及字符串的開始和結尾。這意味著可以匹配每個用換行符分隔的行。但是,字符“.”仍然不匹配換行符
SingleLine
規定特殊字符“.”匹配任意的字符,包括換行符。默認情況下,特殊字符“.”不匹配換行符。通常與 MultiLine 選項一起使用
ECMAScript.
ECMA(European Coputer Manufacturer’s Association, 歐洲計算機生產商協會)已經定義了正則表達式應該如何實現,而且已經在 ECMAScript 規范中實現,這是一個基于標準的 JavaScript。這個選項只能與 IgnoreCase 和 MultiLine 標志一起使用。與其它任何標志一起使用,ECMAScript 都將產生異常
IgnorePatternWhitespace
此選項從使用的正則表達式模式中刪除所有非轉義空白字符。它使表達式能跨越多行文本,但必須確保對模式中所有的空白進行轉義。如果設置了此選項,還可以使用“#”字符來注釋下則表達式
Complied
它把正則表達式編譯為更接近機器代碼的代碼。這樣速度快,但不允許對它進行任何修改
九、oracle 的正則表達式(regular expression)
測試數據
create table test(mc varchar2(60));
insert into test values(112233445566778899
insert into test values(22113344 5566778899
insert into test values(33112244 5566778899
insert into test values(44112233 5566 778899
insert into test values(5511 2233 4466778899
insert into test values(661122334455778899
insert into test values(771122334455668899
insert into test values(881122334455667799
insert into test values(991122334455667788
insert into test values(aabbccddee
insert into test values(bbaaaccddee
insert into test values(ccabbddee
insert into test values(ddaabbccee
insert into test values(eeaabbccdd
insert into test values(ab123
insert into test values(123xy
insert into test values(007ab
insert into test values(abcxy
insert into test values(The final test is is is how to find duplicate words.
commit;
REGEXP_LIKE
語法:REGEXP_LIKE(source_string, pattern[, match_parameter])
說明:返回滿足匹配模式的字符串。相當于增強的 like 函數。
Source_string 指定源字符表達式;
pattern 指定規則表達式;
match_parameter 指定默認匹配操作的文本串。
其中 position,occurtence,match_parameter 參數都是可選的
例句:
select * from test where regexp_like(mc, ^a{1,3}
select * from test where regexp_like(mc, a{1,3}
select * from test where regexp_like(mc, ^a.*e$
select * from test where regexp_like(mc, ^[[:lower:]] ?[[:digit:]]
select * from test where regexp_like(mc, ^[[:lower:]]
Select mc FROM test Where REGEXP_LIKE(mc, [^[:digit:]]
Select mc FROM test Where REGEXP_LIKE(mc, ^[^[:digit:]]
REGEXP_INSTR
語法:REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])
說明:該函數查找 pattern,并返回該模式的第一個位置。您可以隨意指定您想要開始搜索的 start_position。
occurrence 參數默認為 1,除非您指定您要查找接下來出現的一個模式。
return_option 的默認值為 0,它返回該模式的起始位置;值為 1 則返回符合匹配條件的下一個字符的起始位置
例句:
Select REGEXP_INSTR(mc, [[:digit:]]$ ) from test;
Select REGEXP_INSTR(mc, [[:digit:]]+$ ) from test;
Select REGEXP_INSTR(The price is $400. , $[[:digit:]]+ ) FROM DUAL;
Select REGEXP_INSTR(onetwothree , [^[[:lower:]]] ) FROM DUAL;
Select REGEXP_INSTR(,,,,, , [^,]* ) FROM DUAL;
Select REGEXP_INSTR(,,,,, , [^,] ) FROM DUAL;
REGEXP_SUBSTR
語法:REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])
說明:返回匹配模式的子字符串。相當于增強的 substr 函數。
Source_string 指定源字符表達式;
pattern 指定規則表達式;
position 指定起始搜索位置;
occurtence 指定替換出現的第 n 個字符串;
match_parameter 指定默認匹配操作的文本串。
其中 position,occurtence,match_parameter 參數都是可選的
match_option 的取值如下:
‘c’ 說明在進行匹配時區分大小寫(缺省值);
i 說明在進行匹配時不區分大小寫;
n 允許使用可以匹配任意字符的操作符;
m 將 x 作為一個包含多行的字符串。
例句:
SELECT REGEXP_SUBSTR(mc, [a-z]+ ) FROM test;
SELECT REGEXP_SUBSTR(mc, [0-9]+ ) FROM test;
SELECT REGEXP_SUBSTR(aababcde , ^a.*b) FROM DUAL;
REGEXP_REPLACE
語法:REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)
說明:字符串替換函數。相當于增強的 replace 函數。
Source_string 指定源字符表達式;
pattern 指定規則表達式;
replace_string 指定用于替換的字符串;
position 指定起始搜索位置;
occurtence 指定替換出現的第 n 個字符串;
match_parameter 指定默認匹配操作的文本串。
其中 replace_string,position,occurtence,match_parameter 參數都是可選的。
例句:
Select REGEXP_REPLACE(Joe Smith , (){2,} , , ) AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE(aa bb cc , (.*) (.*) (.*) , 3, 2, 1 ) FROM dual;
特殊字符:
^ 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。
$ 匹配輸入字符串的結尾位置。如果設置了 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 位置和順序
?“或”操作
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“正則表達式支持的字符有哪些”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!