正则表达式的总结
经常用到正则表达式,以前很懒总是让同事帮我写,最近有时间稍微复习了下正则表达式的基本语法,发现网络上的这类知识是琳琅满目,通过去糟粕取精华后总结了这篇文章。
为了便于学习,自己写了一个测试正则的小工具
关键代码:
/// <summary> /// 验证 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnVerify_Click(object sender, EventArgs e) { string getRegex = this.txtRegex.Text.Trim(); string getStr = this.txtString.Text.Trim(); //开始匹配 bool result = System.Text.RegularExpressions.Regex.IsMatch(getStr, getRegex); if(result) { this.lblMessage.Text="恭喜您,匹配成功!"; } else { this.lblMessage.Text="对不起,匹配失败!"; } }
命名空间: System.Text.RegularExpressions下的Regex类 该类不是静态类却有自己的静态方法和非静态方法虽然方法名字都是IsMatch,但不是同一个方法,好了言归正传。
元字符
[] 表示字符组,仅仅匹配字符组中的一个字符(只是单个)
例如a[123]b 匹配 a1b、a2b、a3b 不匹配a12b
[0-9] 表示0到9之间任意一个数字
[a-z] 表示a到z之间任意一个字符
. 表示除了\n外的一切单字符
[a-zA-Z] 表示a到z 或者 A到Z之间的任意一个字符
[a\-] 表示只能匹配 单字符a 和 单字符- -前面加一个\是转义的意思 -是连字符需要转义
[a.] 表示匹配a和单字符. .原来表示除了\n外的一切单字符 这里如何需要这样表示则需要 [a\.]
() 类似数学的作用改变逻辑顺序
| 表示或的意思
限定符
{n} 表示{}前面的单字符必须出现n次才匹配成功,如果遇到()则()里面的必须出现n次
{n,} 表示{}前面的单字符必须至少出现n次,如果遇到()则()里面的必须至少出现n次
{n,m} 表示{}前面的单字符出现的次数必须在n到m之间
例如 abcd{2,4}可以匹配 abcdd abcdd
(ab){2,4}可以匹配 abab abababab
* 表示表达式出现0次或n次 和{0,}相同
+ 表示表达式至少出现一次和{1,}相同
? 表示表达式出现0次或者1次和{0,1}相同
注意: * + ? 都是针对表达式的 例如 abc+ 匹配abc 不匹配bc
^和$
^ 表示字符串的开始
^abc 表示需要匹配的正则表达式字符串必须以abc开始
[^0-9] 这里的^代表非的意思,匹配0到9意外的任意单个字符
$ 表示字符串的结束(要匹配的正则表达式的结束)
abc$ 表示字符串必须以abc结尾
简写
\d 相当于[0-9] 例如:a\db 相当于a[0-9]b (特别注意一点\d 除了可以匹配[0-9]这些正常的数字以外,它还可以匹配0123456789这些全角的数组。所以我们如果仅仅需要半角的数字只能使用[0-9]这样的书写方法)
\D 表示[^0-9]
\s 表示所有空白符
\S 是\s的反面,意思是所有\s不能匹配的\S都可以匹配
\w 表示的[a-zA-Z0-9_] 就是所有大小写字母+数字+下划线 的单个字符
\W 表示\w的反面 由于.net默认采用unicode方式来匹配,所以\w也可以匹配汉字
正则表达式的转义符
例如\d表示[0-9] 那么如何匹配\d本身呢 可以这样写:\\d 类似的还有\* \+ \. \- \{2,3}
简便的写法类似于c#中的语法@符号 ,例如:string s=Regex.Escape(@"\d{1,3}");
一个正则表达式当出现双引号的时候我们怎么做书写