1、正则表达式是用来进行文本处理的技术,是与语言无关的一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式2、元字符整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^d{n}$"。只能输入至少n位的数字:"^d{n,}$"。只能输入m~n位的数字:。"^d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。只能输入非零的正整数:"^+?[1-9][0-9]*$"。只能输入非零的负整数:"^-[1-9][]0-9"*$。只能输入长度为3的字符:"^.{3}$"。只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。只能输入由数字、26个英文字母或者下划线组成的字符串:"^w+$"。验证用户密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。验证是否含有^%&"",;=?$"等字符:"[^%&"",;=?$x22]+"。只能输入汉字:"^[u4e00-u9fa5]{0,}$"验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。验证InternetURL:"^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$"。验证电话号码:"^((d{3,4}-)|d{3.4}-)?d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。验证身份证号(15位或18位数字):"^d{15}|d{18}$"。验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^d{n}$"。只能输入至少n位的数字:"^d{n,}$"。只能输入m~n位的数字:。"^d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。只能输入非零的正整数:"^+?[1-9][0-9]*$"。只能输入非零的负整数:"^-[1-9][]0-9"*$。只能输入长度为3的字符:"^.{3}$"。只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。只能输入由数字、26个英文字母或者下划线组成的字符串:"^w+$"。验证用户密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。验证是否含有^%&"",;=?$"等字符:"[^%&"",;=?$x22]+"。只能输入汉字:"^[u4e00-u9fa5]{0,}$"验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。验证InternetURL:"^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$"。验证电话号码:"^((d{3,4}-)|d{3.4}-)?d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。验证身份证号(15位或18位数字):"^d{15}|d{18}$"。验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。 3、Regex静态类常用的4种情况1) 判断是否匹配:Regex.IsMatch("字符串","正则表达式"); IsMatch的正则表达式,一般要加^$,因为它是精确判断是否匹配。2) 字符串提取:Regex.Match("字符串","正则表达式"); 只能提取一次,一般也加^$3) 字符串提取(循环提取所有匹配的):Regex.Matches("字符串","正则表达式"); Matches[在字符串中寻找要查找的内容]的时候,直接写表达式,不需要^$4) 字符串替换:Regex.Replace("字符串","匹配的正则","替换的正则"); 4、练习I) IsMatch1) 判断是否是合法的邮政编码(6位数字)Regex.IsMatch(s, @"^d{6}$") 2) 判断一个字符串是不是身份证号码,即是否是15或18位数字Regex.IsMatch(s, @"^d{15}|d{18}$")分析: 匹配“以15位数字开始”或者“以18位数字结束”( | 的优先级最低,最后执行) 3) 判断一个字符串是否是合法的Email地址Regex.IsMatch(s, @"^w+@w+(.w+)+$") 4) 匹配IP地址,4段用.分割的最多三位数字。 192.168.54.77、333.333.333.333假设都是正确的Regex.IsMatch(s, @"^d{1,3}(.d{1,3}){3}$") 5) 判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字 要求:年份必须是19**或者20**,月份必须在01--12,日必须在01-31下面的写法是错误的,因为|的优先级最低,如果你将并列的选项用括号括起来,判断完数字后,会进行)、(的或运算,就乱了!Regex.IsMatch(s, @"^(19|20)d{2}-(0[1-9])|(1[0-2])-(0[1-9])|([12]d)|(3[01])$")正确的写法!Regex.IsMatch(s, @"^(19|20)d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]d|3[01])$") 6) 判断是否是合法的url地址,http://www.test.com/a.htm?id=3&name=aaa(问号后面的可有可无)Regex.IsMatch(s, @"^w+://w+(.w+)+(?w+=w+(&w+=w+)*)?$") II) Match & Matches1) 从文件路径中提取出文件名(包含后缀)string s = "C:/funny/make/1.txt";Match m=Regex.Match(s, @".+/(.+)");if (m.Success){Console.WriteLine(m.Groups[1].Value);} 2) 从“June 26 , 1951”中提取出月份June来string s = "June 26 , 1951";Match m=Regex.Match(s, @"(w+)s+d+.+d+");if (m.Success){Console.WriteLine(m.Groups[1].Value);}Console.ReadKey(); 3) 从Email中提取出用户名和域名,比如从test@163.com中提取出test和163.com。string s = "test@163.com";Match m=Regex.Match(s, @"^(.+)@(.+)$");string name = m.Groups[1].Value;string field = m.Groups[2].Value;Console.WriteLine("用户名是{0},域名是{1}",name,field); 4) 从一段文本中提取所有的数字string s = "大家好,我是Hebe,我22岁了,身高180,我们团队有3个女女!";MatchCollection mc= Regex.Matches(s, @"d+");foreach (Match m in mc){Console.WriteLine(m.Value);} Console.ReadKey(); 5) 从字符串中提取所有人名string s = "大家好。我们是牛人。我是Jason。我是Jay。呜呜。fffff";MatchCollection mc = Regex.Matches(s, @"我是(w+)");foreach (Match m in mc){Console.WriteLine(m.Groups[1].Value);}Console.ReadKey(); 6) 从一个网站页面提取所有Email地址StringBuilder sb = new StringBuilder();//有问题的话把8080端口号加上,那个default网站的地址string path = "http://localhost:8080/";//创建WebClientWebClient wc = new WebClient();//注意编码问题(!!!)wc.Encoding = Encoding.UTF8;//从网站下载字符串string content=wc.DownloadString(path);//要会写正则MatchCollection mc = Regex.Matches(content, @"w+@w+(.w)+");foreach (Match m in mc){if (m.Success){sb.AppendLine(m.Value);}}Console.WriteLine(sb.ToString());Console.ReadKey(); 7) 从网站抓取所有的图片地址,下载到硬盘(网站所在目录用Cassini搭建一个)//默认网站所在的目录string address = "http://localhost:8080/";WebClient wc = new WebClient();wc.Encoding = Encoding.Default;//取得网站的字符串信息string str=wc.DownloadString(address);//通过观察,分析出图片的存储形式MatchCollection mc = Regex.Matches(str, @"src=""(hotgirls/(d{2}_d{2}.jpg))""");foreach (Match m in mc){//得到每一幅图片的物理全路径string picAddr=Path.Combine(address,m.Groups[1].Value);//下载图片到自己指定的路径(且图片名称与网站上图片的名称一样)wc.DownloadFile(picAddr, Path.Combine(@"E:",m.Groups[2].Value));} 8) 抓取所有超链接 StringBuilder sb = new StringBuilder();//默认网站所在的目录string address = "http://localhost:8080/";WebClient wc = new WebClient();wc.Encoding = Encoding.UTF8;//取得网站的字符串信息string str=wc.DownloadString(address);//通过观察,分析出图片的存储形式//要非某一项的话(<a href=[^>]+>[^<]+</a>),^一定要用[]括起来MatchCollection mc = Regex.Matches(str, @"<a href=[^>]+>[^<]+</a>");foreach (Match m in mc){sb.AppendLine(m.Value);}Console.WriteLine(sb.ToString());Console.ReadKey(); III) Replace1) 删除所有连续的a,其实就是将连续的a替换为空字符串。string s = "你aaa好aa哈哈a你";s=Regex.Replace(s, @"a+", "");Console.WriteLine(s);Console.ReadKey(); 2) 我的生日是05/21/2010耶”转换为“我的生日是2010年05月21日???string s = "我的生日是05/21/2010耶";s=Regex.Replace(s, @"(d{2})/(d{2})/(d{4})", "$3年$1月$2日");Console.WriteLine(s);Console.ReadKey(); 3) hello "welcome to" beautiful"China" 输出 hello 【welcome to】 beautiful【China】string s = " hello "welcome to" beautiful"China" ";//贪婪模式(?一般用来修饰+)s=Regex.Replace(s, @""(.+?)"", "【$1】");Console.WriteLine(s);Console.ReadKey(); 4) http://www.test.com 替换为 <a href="http://www.test.com">http://www.test.com</a>string s = "http://www.test.com";s=Regex.Replace(s, @"(.+)", @"<a href=""$1"">$1</a>");Console.WriteLine(s);Console.ReadKey(); 5) 将文本中连续的空格替换为一个空格.“hello welcome to China.”→”hello welcome to China”string s = "hello welcome to China.";s=Regex.Replace(s, @"(s)+", @"$1");Console.WriteLine(s);Console.ReadKey(); 6) UBB翻译将[URL=http://www.linuxidc.com]Linux公社[/URL]替换为<a href="http://www.linuxidc.com">Linux公社</a>string s = "[URL=http://www.linuxidc.com]Linux公社[/URL]";string str = Regex.Replace(s, @".+=(.+)](.+)[.+", @"<a href=""$1"">$2</a>");Console.WriteLine(str);Console.ReadKey();Linux正则表达式特性及BRE与ERE的区别 http://www.linuxidc.com/Linux/2014-03/99152.htmgrep使用简明及正则表达式 http://www.linuxidc.com/Linux/2013-08/88534.htm正则表达式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm正则表达式之零宽断言 http://www.linuxidc.com/Linux/2013-03/81897.htmLinux中正则表达式与文件格式化处理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm基础正则表达式 http://www.linuxidc.com/Linux/2014-09/106296.htm常用正则表达式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2015-01/111397p2.htm