標籤:
Regex萬用字元叫做:元字元
1> . 除\n之外的任意單個字元
2> [] 表示取中括弧內的任意一個字元
3> ^ 在中括弧內匹配取反,在外匹配以什麼開頭
4> | 或者
5> () 優先順序或定義提取組
6> * 限定符 表示前面的運算式可以出現0次或多次,可有可無,可多可少
7> + 限定符 至少出現1次或多次
8> ? 限定符 表示出現一次或出現0次
9> { } 限定符 表示限定前面的正式運算式出現的次數
10>{n,m} 限定符 限定符前面的Regex出現的次數至少在>=n和<=m之間
11>{n,} 限定符 限定符前面的Regex出現的次數至少在<=n次
12> $ 表示匹配結束,如xyz$ 表示任何以xyz結束的字串,與^配合限定固定字元,如^xyz$
Regex特殊表示方式有(為了讓編譯器區分轉義,在\前面應該加@,如@"^\d{6}$"等):
\d 表示0~9的其中任一數字
\D 是\d的反面,表示非0~9的任一數字
^a[0-9]b$可以寫為^a\db$,其中\d表示0~9中任一數字的意思,而大寫\D則相當於取反,表示\d的反面
如[^0-9]b 可以寫為\Db
\s 表示空白符,如空格和斷行符號等不可見的字元
\S \s的反面,表示非空白符
\w 表示數字,字母、底線或漢字,即能組成單詞的任一字元,除% & #@ !$等字元。[a-zA-Z0-9_漢字]
\W 非\w,等同於[^\w]%
----------------------------------------------------------------------------------
Regex是通過以上不同元字元之間的組合使用,而達到匹配字元目的的。
從而為編程帶來更大的便利。
在.Net中使用Regex類(在System.Text.RegularExpressions命名空間下)來處理正式運算式,
其中常用的成員方法有:
----------------------------------------------------------------------------------
Regex.IsMatch()//判斷一個字串是否匹配某個Regex
Regex.Match()//提取一個
Regex.Matches()//提取多個
Regex.Replace() //字串替換,把所有匹配Regex的字串替換為對應的字元
範例:電子郵箱驗證 @"^[a-zA-Z0-9][a-zA-Z0-9_\.][email protected][a-zA-Z0-9]+(\.[a-zA-Z]+)+$"
6位郵遞區號 ^[0-9]{6}$
15位或18位純數字社會安全號碼碼 ^([0-9]{15}|[0-9]{18})$
或 ^(\d{15}|\d{18})$
或 ^\d{15}$|^\d{18}$
其它常用的C#Regex!
"^\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地址
YYYY-MM-DD基本上把閏年和2月等的情況都考慮進去了
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
C#Regex
圖片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\‘)
中文 ^([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)$
網址 "\<a.+?href=[‘""](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^‘"">]+?)[^>]*?\>"
匹配中文字元的Regex: [\u4e00-\u9fa5]
匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
匹配空行的Regex:\n[\s| ]*\r
匹配HTML標記的Regex:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的Regex:(^\s*)|(\s*$)(像vbscript那樣的trim函數)
匹配Email地址的Regex:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的Regex:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
C# Regex