Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1105444
  • 博文数量: 141
  • 博客积分: 3161
  • 博客等级: 中校
  • 技术积分: 3011
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-27 14:53
文章存档

2012年(28)

2011年(113)

分类: 嵌入式

2011-09-29 10:29:06

     前言:正则表达式不仅仅只是用来验证的工具,对正则表达式式的误解就像我们在ajax出现之前只是把javascript看成一种"可有可无的,装饰型"的语种.     

   其实正则表达充斥着我们的编程世界,从最底层的编译器的编译解析,到上层的字符串处理,都是正则表达式.我们重视它吧!

 

    以前我也只是认为正则表达式这是一种验证的工具,或者处理一些字符串文本,所以对它学习的也不深,直到我开发一个论坛,类似Discuz!NT那样的论坛时,我才重视

 

    正则表达式.特别是在从后台生成静态页面,和模板的时候,没有正则表达式几乎就不行.

 

     在我的ASP.NET控件开发系列中有文章提过:我们把aspx页面提交后,编译器其实就是把那些标记,如:,用正则表达式模式来解析整个页面的,例如,看见,就把它解析为一个Button类,然后整个充满标记的aspx页面,就被解析为了一个类(以.cs结尾的类).

 

    还有例子就是:我们在给别人回复email的时候,我们总可以看见我们要写的回复邮件的标题,地址,以及一些正文都有系统生成好了.

 

    上面只是说明正则表达式重要的例子,大家想想,我们写的程序,说白了就是一大堆的字符串文本,程序的编译,实际上就是根据相应的规则处理我们程序文本的过程,编译器在底层就是在用正则表达式分析我们的程序.也许大家认为我说这些没有作用,因为编译器的怎么干,不关我们什么事,但是明白了正则表达的作用以及机制之后,起码可以使得我们对编程更加的顺心.

 

    所以在开发网站,比如论坛,CMS的时候,不把那些页面看的很神秘,其实就是一堆字符串,也许这样想,我们开发开心一点.

    

    学习正则表达式,不仅仅只是学会几个其中的几个元字符就OK了的.如,我们都知道*,?,/s,/w等的意义.也能看懂很多的正则表达式.但是我们能够掌握正则表达式的机制,随心写出自己想要的,高效匹配的正则表达式吗?为什么有分组的,捕获,正则表达式引擎是怎样回溯的?(要知道一些编译原理的知识)

          

    在下面的内容中,我讲把.NET中有关正则表达式的常用类和方法讲下(C#描述),希望大家之前对正则表达式了解,如果想深入理解正则表达式,我给大家推荐本书"精通正则表达式".

    讲解的内容如下:

     1.快速入门

     2.核心对象详解    

 

     在.NET中使用 正则表达式要导入

  1. using System.Text.RegularExpressions;

     1.快速入门     

     1.1在字符串中查找匹配:          

    

  1. if(Regex.IsMatch(strString,@"^\s*$")
  2.   Console.WriteLine("No,it is empty")
  3. else
  4.   Console.WriteLine("Yes,it is not empty")

  5. //注意IsMatch有重载的方法

  6. //strString--被匹配的文本,,@"^\s*$"--用来匹配的正则表达式

  7. if(Regex.IsMatch(strString,@"^\s*$",RegexOptions.IgnoreCase)//IgnoreCase不区分大小写匹配

  8.   Console.WriteLine("No,it is empty")
  9. else
  10.   Console.WriteLine("Yes,it is not empty")

 

     1.2 匹配,并且获得匹配的文本:

 
  1. string result=Regex.Match(strString,"\d+").Value;

  2. 注意,有重载的方法
  3. //当然数字没有大小写,

  4. string result=Regex.Match(strString,"\d+",RegexOptions.IgnoreCase).Value;

     1.3 匹配,并且获得捕获文本

     

  1. string result=Regex.Match(strString,@"^Subject:(.*)").Groups[1].Value;
  2. //应该记得正则表达式中的括号"()"的作用--分组,捕获.

  3. //如过你的串是strString="Subject:Hello Xiaoyang",那么结果就是那个括号"()"中的".*"匹配"Hello Xiaoyang",然后你可以索引括号中匹配的文本

  4. //用Groups.如果你的正则表达式中还有更多的括号"()",那么你就的Groups[i]中数字就要根据你想得到的匹配串改变

  5. //如我们把正则表达式是换为,^Subject:(H)(.*),那么,你Groups[1].Value就为"H",Groups[2].Value就为"ello Xiaoyang"


     当然,还有使用命名的捕获:如下:     

  1. string result=Regex.Match(strString,@"^Subject:(?.*)").Groups["Sub"].Value;

    1.4.查找,替换

    例如:我们一个字符串中的所有a转换为b     

  1. string result=Regex.Replace(strString,@"^a$","b");

  2. //更加实际的例子就是:转换HTML的字符,如


  3. string result=Regex.Replace(strString,@"&","&");
  4. string result=Regex.Replace(strString,@"<","&ait");

     

     快速入门就说到这里,也不知道大家的想法,如果大家让我说说  

     可以留个言,交流下,因为我觉得没有基本看这些文章.可以不是很好理解,如果大家不爱看,我写出来也没有意义了!

     

阅读(1161) | 评论(0) | 转发(0) |
0

上一篇:.NET核心正则类详解

下一篇:选择需要勇气

给主人留下些什么吧!~~