前言:正则表达式不仅仅只是用来验证的工具,对正则表达式式的误解就像我们在ajax出现之前只是把javascript看成一种"可有可无的,装饰型"的语种.
其实正则表达充斥着我们的编程世界,从最底层的编译器的编译解析,到上层的字符串处理,都是正则表达式.我们重视它吧!
以前我也只是认为正则表达式这是一种验证的工具,或者处理一些字符串文本,所以对它学习的也不深,直到我开发一个论坛,类似Discuz!NT那样的论坛时,我才重视
正则表达式.特别是在从后台生成静态页面,和模板的时候,没有正则表达式几乎就不行.
在我的ASP.NET控件开发系列中有文章提过:我们把aspx页面提交后,编译器其实就是把那些标记,如:,用正则表达式模式来解析整个页面的,例如,看见,就把它解析为一个Button类,然后整个充满标记的aspx页面,就被解析为了一个类(以.cs结尾的类).
还有例子就是:我们在给别人回复email的时候,我们总可以看见我们要写的回复邮件的标题,地址,以及一些正文都有系统生成好了.
上面只是说明正则表达式重要的例子,大家想想,我们写的程序,说白了就是一大堆的字符串文本,程序的编译,实际上就是根据相应的规则处理我们程序文本的过程,编译器在底层就是在用正则表达式分析我们的程序.也许大家认为我说这些没有作用,因为编译器的怎么干,不关我们什么事,但是明白了正则表达的作用以及机制之后,起码可以使得我们对编程更加的顺心.
所以在开发网站,比如论坛,CMS的时候,不把那些页面看的很神秘,其实就是一堆字符串,也许这样想,我们开发开心一点.
学习正则表达式,不仅仅只是学会几个其中的几个元字符就OK了的.如,我们都知道*,?,/s,/w等的意义.也能看懂很多的正则表达式.但是我们能够掌握正则表达式的机制,随心写出自己想要的,高效匹配的正则表达式吗?为什么有分组的,捕获,正则表达式引擎是怎样回溯的?(要知道一些编译原理的知识)
在下面的内容中,我讲把.NET中有关正则表达式的常用类和方法讲下(C#描述),希望大家之前对正则表达式了解,如果想深入理解正则表达式,我给大家推荐本书"精通正则表达式".
讲解的内容如下:
1.快速入门
2.核心对象详解
在.NET中使用 正则表达式要导入
- using System.Text.RegularExpressions;
1.快速入门
1.1在字符串中查找匹配:
- if(Regex.IsMatch(strString,@"^\s*$")
- Console.WriteLine("No,it is empty")
- else
- Console.WriteLine("Yes,it is not empty")
- //注意IsMatch有重载的方法
- //strString--被匹配的文本,,@"^\s*$"--用来匹配的正则表达式
- if(Regex.IsMatch(strString,@"^\s*$",RegexOptions.IgnoreCase)//IgnoreCase不区分大小写匹配
- Console.WriteLine("No,it is empty")
- else
- Console.WriteLine("Yes,it is not empty")
1.2 匹配,并且获得匹配的文本:
- string result=Regex.Match(strString,"\d+").Value;
- 注意,有重载的方法
- //当然数字没有大小写,
- string result=Regex.Match(strString,"\d+",RegexOptions.IgnoreCase).Value;
1.3 匹配,并且获得捕获文本
- string result=Regex.Match(strString,@"^Subject:(.*)").Groups[1].Value;
- //应该记得正则表达式中的括号"()"的作用--分组,捕获.
- //如过你的串是strString="Subject:Hello Xiaoyang",那么结果就是那个括号"()"中的".*"匹配"Hello Xiaoyang",然后你可以索引括号中匹配的文本
- //用Groups.如果你的正则表达式中还有更多的括号"()",那么你就的Groups[i]中数字就要根据你想得到的匹配串改变
- //如我们把正则表达式是换为,^Subject:(H)(.*),那么,你Groups[1].Value就为"H",Groups[2].Value就为"ello Xiaoyang"
当然,还有使用命名的捕获:如下:
- string result=Regex.Match(strString,@"^Subject:(?.*)").Groups["Sub"].Value;
1.4.查找,替换
例如:我们一个字符串中的所有a转换为b
- string result=Regex.Replace(strString,@"^a$","b");
- //更加实际的例子就是:转换HTML的字符,如
- string result=Regex.Replace(strString,@"&","&");
- string result=Regex.Replace(strString,@"<","&ait");
快速入门就说到这里,也不知道大家的想法,如果大家让我说说
可以留个言,交流下,因为我觉得没有基本看这些文章.可以不是很好理解,如果大家不爱看,我写出来也没有意义了!