C# 正則表達式(Regex類)


正則表達式是由普通字符(如英文字母)以及特殊字符(也稱為元字符)組成的一種文字模式

這種文字模式可用於檢查字符串的值是否滿足一定的規則,例如:

  • 驗證輸入的郵箱是否合法

  • 輸入的身份證號碼是否合法

  • 輸入的用戶名是否滿足條件等

也可以進行字符串的替換和提取

所以,正則表達式可以是單個字符,也可以是更復雜的模式

Regex類

C# 正則表達式 Regex 類,包含於 System.Text.RegularExpressions 命名空間下,常用的方法如下:

方法

描述

public bool IsMatch( string input )

指示 Regex 構造函數中指定的正則表達式,是否在指定的輸入字符串中找到匹配項。

public bool IsMatch( string input, int startat )

指示 Regex 構造函數中指定的正則表達式,

是否在指定的輸入字符串中找到匹配項,從字符串中指定的開始位置開始。

public static bool IsMatch( string input, string pattern )

指示指定的正則表達式,是否在指定的輸入字符串中找到匹配項。

public MatchCollection Matches( string input )

在指定的輸入字符串中,搜索正則表達式的所有匹配項。

public string Replace( string input, string replacement )

在指定的輸入字符串中,

把所有匹配正則表達式模式的所有匹配的字符串,替換為指定的替換字符串。

public string[] Split( string input )

把輸入字符串分割為子字符串數組,

根據在 Regex 構造函數中,指定的正則表達式模式定義的位置進行分割。

Regex 類中還提供了很多方法來操作正則表達式:

字符 描述
\ 轉義字符,將一個具有特殊功能的字符轉義為一個普通字符,或反過來
(pattern) 匹配 pattern 並獲取這一匹配
(?:pattern) 匹配 pattern 但不獲取匹配結果
(?=pattern)  正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串
(?!pattern) 負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串
x|y

匹配x或y;例如:

‘z|food’能匹配“z”或“food”。

‘(z|f)ood’則匹配“zood”或“food”

[xyz]

字符集合;匹配所包含的任意一個字符。例如:

‘[abc]’可以匹配“plain”中的‘a’

[^xyz] 

負值字符集合;匹配未包含的任意字符。例如:

‘[^abc]’可以匹配“plain”中的‘p’

[a-z]

匹配指定范圍內的任意字符。例如:

‘[a-z]’可以匹配'a'到'z'范圍內的任意小寫字母字符

[^a-z]

匹配不在指定范圍內的任意字符。例如:

‘[^a-z]’可以匹配不在‘a’~‘z’'內的任意字符

\B 匹配非單詞邊界
\D 匹配一個非數字字符,等價於 [^0-9]
\f  匹配一個換頁符
\n 匹配一個換行符
\r 匹配一個回車符
\S 匹配任何非空白字符
\t 匹配一個制表符
\v 匹配一個垂直制表符,等價於 \x0b 和 \cK
\W 匹配任何非單詞字符,等價於‘[^A-Za-z0-9_]’

正則表達式的符號

正則表達式中的元字符:

字符 描述
. 匹配除換行符以外的所有字符
\w 匹配字母、數字、下畫線
\s 匹配空白符(空格)
\d 匹配數字
\b 匹配表達式的開始或結束
^ 匹配表達式的開始
$ 匹配表達式的結束

正則表達式中表示重復的字符:

字 符 描 述
* 0次或多次字符
? 0次或1次字符
+ 1次或多次字符
{n} n次字符
{n,M}  n到M次字符
{n, } n次以上字符

Regex類的實例

字符串替換:

1     string strInfo = "YEAR=2021年;MONTH=10月;DAY=01日";
2     Console.WriteLine("日期:"+strInfo);
3     Console.WriteLine("將日期中的MONTH修改為1月:");
4     Regex reg = new Regex("MONTH=(.+);");
5     string strAfter = reg.Replace(strInfo, "MONTH=01月;");
6     Console.WriteLine("修改后的日期為:\n" + strAfter);

字符串匹配:

1     string strInfo = "YEAR=2021年;MONTH=10月;DAY=01日";
2     Console.WriteLine("日期:" + strInfo);
3     Console.WriteLine("提取日期字符串中的月份:");
4     Regex reg = new Regex("MONTH=(.+);");
5     Match match = reg.Match(strInfo);
6     string strAfter = match.Groups[1].Value;
7     Console.WriteLine("日期的月份為:" + strAfter);

Match實例:

1     string strInfo = "Road=9527;Speed=56.7km/h;Acceleration=5.25mph/s";
2     Console.WriteLine("道路情況:" + strInfo);
3     Console.WriteLine("提取道路情況中的速度情況:");
4     Regex reg = new Regex(@"Speed\s*=\s*([\d\.]+)\s*(mph|km/h|m/s)*");
5     Match match = reg.Match(strInfo);
6     string strAfter1 = match.Groups[1].Value;
7     string strAfter2 = match.Groups[2].Value;
8     Console.WriteLine("速度值為:{0} 速度單位為:{1}", strAfter1, strAfter2);

解碼GPS的GPRMC字符串:

1     // 獲取字符串中的經度、緯度值
2     Regex reg = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");

提取 [ ] 中的值:

1     string strInfo = "abcd[9527]dcba";
2     Console.WriteLine("字符串:" + strInfo);
3     Console.WriteLine("提取字符串[]中的值:");
4     string pattern = @"(?is)(?<=\[)(.*)(?=\])";
5     string strAfter = new Regex(pattern).Match(strInfo).Value;
6     Console.WriteLine("字符串[]中的值為:" + strAfter);

提取 ( ) 中的值:

1    string strInfo = "abcd(9527)dcba";
2    Console.WriteLine("字符串:" + strInfo);
3    Console.WriteLine("提取字符串()中的值:");
4    string pattern = @"(?is)(?<=\()(.*)(?=\))";
5    string strAfter = new Regex(pattern).Match(strInfo).Value;
6    Console.WriteLine("字符串()中的值為:" + strAfter);

提取 { } 中的值:

1    string strInfo = "abcd{9527}dcba";
2    Console.WriteLine("字符串:" + strInfo);
3    Console.WriteLine("提取字符串{}中的值:");
4    string pattern = @"(?is)(?<=\{)(.*)(?=\})";
5    string strAfter = new Regex(pattern).Match(strInfo).Value;
6    Console.WriteLine("字符串{}中的值為:" + strAfter);

常用的正則表達式

校驗數字的表達式:

 1   // 驗證數字
 2   Regex reg = new Regex(@"^[0-9]*$");
 3   // 驗證n位的數字
 4   Regex reg = new Regex(@"^\d{n}$");
 5   // 驗證至少n位的數字
 6   Regex reg = new Regex(@"^\d{n,}$");
 7   // 驗證m-n位的數字
 8   Regex reg = new Regex(@"^\d{m,n}$");
 9   // 驗證零和非零開頭的數字
10   Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
11   // 驗證非零開頭的最多帶兩位小數的數字
12   Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");
13   // 驗證帶1-2位小數的正數或負數
14   Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
15   // 驗證正數、負數、和小數
16   Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
17   // 驗證有兩位小數的正實數
18   Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
19   // 驗證有1~3位小數的正實數
20   Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");
21   // 驗證非零的正整數
22   Regex reg = new Regex(@"^[1-9]\d*$");
23   Regex reg = new Regex(@"^([1-9][0-9]*){1,3}$");
24   Regex reg = new Regex(@"^\+?[1-9][0-9]*$");
25   // 驗證非零的負整數
26   Regex reg = new Regex(@"^\-[1-9][0-9]*$");
27   Regex reg = new Regex(@"^-[1-9]\d*$");
28   // 驗證非負整數
29   Regex reg = new Regex(@"^\d+$");
30   Regex reg = new Regex(@"^[1-9]\d*|0$");
31   // 驗證非正整數
32   Regex reg = new Regex(@"^-[1-9]\d*|0$");
33   Regex reg = new Regex(@"^((-\d+)|(0+))$");
34   // 驗證非負浮點數
35   Regex reg = new Regex(@"^\d+(\.\d+)?$");
36   Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
37   // 驗證非正浮點數
38   Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$");
39   Regex reg = new Regex(@"^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
40   // 驗證正浮點數
41   Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$");
42   Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
43   // 驗證負浮點數
44   Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$");
45   Regex reg = new Regex(@"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");
46   // 驗證浮點數
47   Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$");
48   Regex reg = new Regex(@"^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");

校驗字符的表達式:

 1   // 驗證漢字
 2   Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
 3   // 驗證英文和數字
 4   Regex reg = new Regex(@"^[A-Za-z0-9]+$");
 5   Regex reg = new Regex(@"^[A-Za-z0-9]{4,40}$");
 6   // 驗證長度為3-20的所有字符
 7   Regex reg = new Regex(@"^.{3,20}$");
 8   // 驗證由26個英文字母組成的字符串
 9   Regex reg = new Regex(@"^[A-Za-z]+$");
10   // 驗證由26個大寫英文字母組成的字符串
11   Regex reg = new Regex(@"^[A-Z]+$");
12   // 驗證由26個小寫英文字母組成的字符串
13   Regex reg = new Regex(@"^[a-z]+$");
14   // 驗證由數字和26個英文字母組成的字符串
15   Regex reg = new Regex(@"^[A-Za-z0-9]+$");
16   // 驗證由數字、26個英文字母或者下划線組成的字符串
17   Regex reg = new Regex(@"^\w+$");
18   Regex reg = new Regex(@"^\w{3,20}$");
19   // 驗證中文、英文、數字包括下划線
20   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");
21   // 驗證中文、英文、數字但不包括下划線等符號
22   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$");
23   Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$");
24   // 驗證可以輸入含有^%&’,;=?$\”等字符
25   Regex reg = new Regex(@"[^%&’,;=?$\x22]+");
26   // 驗證禁止輸入含有~的字符
27   Regex reg = new Regex(@"[^~\x22]+"); 

特殊需求的表達式:

 1   // 驗證Email地址
 2   Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
 3   // 驗證域名
 4   Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");
 5   // 驗證InternetURL
 6   Regex reg = new Regex(@"[a-zA-z]+://[^\s]*");
 7   Regex reg = new Regex(@"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
 8   // 驗證手機號碼
 9   Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
10   // 驗證電話號碼(XXX-XXXXXXX、XXXX-XXXXXXXX、XXX-XXXXXXX、XXX-XXXXXXXX、XXXXXXX 和 XXXXXXXX)
11   Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
12   // 驗證國內電話號碼
13   Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}");
14   // 驗證身份證號(15位、18位數字)
15   Regex reg = new Regex(@"^\d{15}|\d{18}$");
16   // 驗證短身份證號碼(數字、字母x結尾)
17   Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$");
18   Regex reg = new Regex(@"^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$");
19   // 驗證帳號是否合法(字母開頭,允許5-16字節,允許字母數字下划線)
20   Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
21   // 驗證密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下划線)
22   Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$");
23   // 驗證強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間)
24   Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
25   // 驗證日期格式
26   Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}");
27   // 驗證一年的12個月
28   Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$");
29   // 驗證一個月的31天
30   Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
31   // 驗證錢的輸入格式:"10000.00" 和 "10,000.00", 和沒有 “分” 的 "10000" 和 "10,000"
32   Regex reg = new Regex(@"^[1-9][0-9]*$");
33   // 驗證任意一個不以0開頭的數字
34   Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
35   // 驗證一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號
36   Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$");
37   // 驗證一個0或者一個可能為負的開頭不為0的數字
38   Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$");
39   // 驗證小數點后面至少應該有1位數
40   Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
41   // 驗證小數點后面必須有兩位
42   Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$");
43   // 驗證允許用戶只寫一位小數
44   Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");
45   // 驗證1到3個數字,后面跟着任意個 逗號+3個數字,逗號成為可選,而不是必須
46   Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");
47   // 驗證xml文件
48   Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");
49   // 驗證中文字符的正則表達式
50   Regex reg = new Regex(@"[\u4e00-\u9fa5]");
51   // 驗證雙字節字符
52   Regex reg = new Regex(@"[^\x00-\xff] (包括漢字在內,可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))");
53   // 驗證空白行的正則表達式,可用來刪除空白行
54   Regex reg = new Regex(@"\n\s*\r");
55   // 驗證HTML標記的正則表達式
56   Regex reg = new Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");
57   // 驗證首尾空白字符的正則表達式
58   Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");
59   // 驗證騰訊QQ號(騰訊QQ號從10000開始)
60   Regex reg = new Regex(@"[1-9][0-9]{4,}");
61   // 驗證中國郵政編碼(中國郵政編碼為6位數字)
62   Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");
63   // 驗證IP地址
64   Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");
65   // 驗證IP地址
66   Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");

 

 

 

 

 

*** |  以上內容僅為學習參考、學習筆記使用  | ***

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM