1. 程式人生 > >C#正則表示式簡單總結

C#正則表示式簡單總結

C#:
c#中驗證正則表示式的類為System.Text.RegularExpressions.Regex
簡單的匹配方法為IsMatch(4個過載方法)


正則表示式語法:
一、匹配單個字元
[ ]:從中選擇一個字元匹配
如:單詞字元([ae])、非單詞字元([!?,;@#$*])、字母範圍([A-Z])、數字範圍([0-9])、^在[ ]中為排除某些字元(如[^a]匹配除a以外的任何字元)
eg.正則表示式[ae]ffect
可匹配字串 affect,effect

注意:要在字元類中匹配連字元,那麼把連字元號作為第一個字元列出即可。


二、特殊匹配字元
\t:匹配製表符 \r:匹配硬回車符 \n:匹配換行符
.:匹配任何除了\n以外的字元(\.則匹配該字元本身)
\w:匹配任何單詞字元(任何字母或數字)
\W:匹配任何非單詞字元(除了字母和數字以外的任何字元)
\s:匹配任何空白字元(包括空格、換行、製表符等) 
\S:匹配任何非空白字元(除了空格、換行、製表符等的任何字元)
\d:匹配任何數字字元(0~9的數字) 
\D:匹配任何非數字字元(除了0~9以外的任何字元)
^:匹配字串的開頭(或者多行模式下行的開頭)。 
$:匹配字串的結尾,或者是字串結尾“\n”之前的最後一個字元,或者是多行模式中的行結尾。 
\A:匹配字串的開頭(忽略多行模式) \Z:匹配字串的結尾或字串結尾“\n”之前的最後一個字元(忽略多行模式)。 

\z:匹配字串的結尾。 \G:匹配當前搜尋開始的位置。 

\b:匹配單詞的邊界。 \B:匹配單詞的非邊界。 

注意:

1、\A和\z在確保字串所包含的是某個表示式,而不是其他內容時很用。

eg.正則表示式\Asophia\z

可匹配字串要 sophia(不含任何額外的字元、換行符或者空白。)

2、可以使用\b匹配單詞的邊界
eg.正則表示式\blet\b
可匹配字串 let
不可匹配字串letter,hamlet


三、匹配二選一

|:匹配二選一

eg.正則表示式col(o|ou)r
可匹配字串 color,colour

注意:\b(bill|ted)和\bbill|ted是不同的。

後者可以匹配malted


四、量詞匹配

*:匹配0次或多次 +:匹配1次或多次 ?:匹配0次或1次{n}:恰好匹配n次

{n,}:至少匹配n次{n,m}:至少匹配n次,至多匹配m次

eg.正則表示式brothers?
可匹配字串 brother,brothers

eg.正則表示式\bp\d{3,5}
可匹配字串 \b以p開頭,且後跟3~5個數字結尾

注意:也可以把量詞與()一起使用,以便把該量詞應用到整個字母序列。
eg.正則表示式(The)?schoolisbeautiful.
可匹配字串 schoolisbeautiful,Theschoolisbeautiful.


五、貪婪量詞

識別正則表示式和貪婪 有些量詞是貪婪的(greedy).他們會盡可能多的匹配字元。
如量詞*匹配0個或多個字元。假設要匹配字串中任何HTML標籤。你可能會用如下正則表示式:
<.*>
現有字串A<i>quantifier</i>canbe<big>greedy</big>
結果<.*>把<i>quantifier</i>canbe<big>greedy</big>都匹配上了。
要解決該問題,需要與量詞一起使用一個特殊的非貪婪字元“?”,因此表示式變化如下:
<.*?>
這樣就可以正確匹配<i>、</i>、<big>、</big>。


六、捕獲和反向引用

():用來捕獲其中的字串
\數字:用編號來引用
eg.
正則表示式 (\w)(\w)\2\1
可匹配字串abba(迴文)
注意:
1、反向引用用來匹配html標籤非常有效如<(\w+)></\1>可以匹配<table></table>等類似格式的標籤。


常用的C#正則表示式:

"^\d+$" //非負整數(正整數 + 0) 
"^[0-9]*[1-9][0-9]*$" //正整數 
"^((-\d+)|(0+))$" //非正整數(負整數 + 0) 
"^-[0-9]*[1-9][0-9]*$" //負整數 
"^-?\d+$" //整數 
"^\d+(\.\d+)?$" //非負浮點數(正浮點數 + 0) 
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數 
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0) 
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數 
"^(-?\d+)(\.\d+)?$" //浮點數 
"^[A-Za-z]+$" //由26個英文字母組成的字串 
"^[A-Z]+$" //由26個英文字母的大寫組成的字串 
"^[a-z]+$" //由26個英文字母的小寫組成的字串 
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字串 
"^\w+$" //由數字、26個英文字母或者下劃線組成的字串 
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url 
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //電話號碼 
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址