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

2012年(28)

2011年(113)

分类: 嵌入式

2011-09-29 10:27:20

    前言:大家反映文章的排版有问题,我在写文章的时候也一直注意这个问题,写的时候排版不错,但是发上去了就变了,我也不知道怎么回事,希望大家理解!谢谢各位!

    上一篇文章讲一了一些.NET中的正则表达式的类,而且着重讲了Regex类,下面我们就接着讲解,今天的内容分为以下部分:

    1.Regex类的一些高级话题.

    首先,我们接着上次的Regex的一些继续:

    

    1.1在Regex中有一个方法很奇怪的,那就是它的Replace方法,很多的类都有这个方法,比如string类也有,说白了就了替换方法,但是Regex类的这个方法稍有

不同.

    首先,我们还是来举个例子,便于后面的讲解: 

  1. Regex regex=new Regex(@"\s+");

    上面的例子很简单,下面我们来看看Replace方法的几个重载:

     
  1.           regex.Replace(strString,replacement);

  2.           regex.Replace(strString,replacement,count);

  3.           regex.Replace(strString,replacement,count,offset);

 

    方法的返回值类型都是string的.

    我们来解析参数的意思:strString:要被替换的那个字符串,replacement:用来替换的字符串,比如strString="   xiaoyang    ",replacement=" ",那么我们实际是用一个空格来替换strString的所有空格.count:就是说明,你要匹配几次,是个int类型的数,默认情况下,你不设置这个值,你的正则表达式会把strString中符合条件的全部匹配,然后替换,如果,你设置了这个数,如上面的例子,你不设置时,结果是" xiaoyang "(注意,前后只有一个空格了,原来有很多的).如果你设置count参数为1,那么你的正则表达式就只是匹配替换一个,即替换strString前面的那些空白,结果就是"xiaoyang";

          

    还有一个参数就是offset,这个参数和前面Match()方法的一样,指定开始匹配的位置.

 

    下面进入一些高级话题:          

 

    上面讲了replacement就是用来替换的字符串,其实这只是replcement的一个用法,即你可以在这样regex.Replace(strString," xxxx");"xxxx"表示你用来替换的字符串.其实在replacement参数这个位置,我们还可以传入一个委托,使得用法更加的灵活.

 

    这个方法很有用,比如,但你要替换strString中的一些字符,但是你不只是简简单单的将用一个,如"a"来替换strString中的一个"bc",你而是想,只要在strString中看见"bc",那么就要开始进行一些操作,显示把"bc"进行一些运算,然后在再进行一些操作,之后还进行一些操作.这样,你就要再看见"bc"后传入一个方法.那么现在,将replacement 传入一个委托(函数指针)就很好处理这个问题.

 

    这个委托的形式如下: 

  1. MatchEvaluator matchEvaluator=new MatchEvaluator (MatchFun);//注意:MatchFun就是你要进行处理的那个方法,方法比如有一个Match类型的参数

    那么我们之前说的那个例子用委托来说下:       

  1. regex.Replace(strString,matchEvaluator);

    然后,你定义方法就可以了,如string MyMatchFun(Match match);

 

    而且再MyMatchFun的方法中,Match对象中保存了你匹配的有关信息的,如你刚刚匹配到的那个"bc"值,就再Match.Value中,如果有分组的话,你还可以用Groups[i](注意:i是个数组索引)来取你想要的值.     

 

    好了,高级话题就先说到这里,我们下面来看看Regex的最后一个方法Split.

    这个方法和string类的split方法很相似的,都是分割,只不过,Regex类的这个方法是先匹配,再分割,看看下面的这个例子 

  1. Regex regex=new Regex(@"\.");
  2. string[] result=regex.Split("192.168.1.1");

    先是匹配字符串中所有"."然后分割.返回结果是数组.

    下面是Split的方法重载:

  1.           regex.Split(strString);

  2.           regex.Split(strString,count);

  3.           regex.Split(strString,count,offset)

    参数的意思和上面的Replace方法的一样,我不赘述了.

    我今天写到这里,内容不多,大家见谅.下一篇就写Group和Match对象.大家关注!

 

 

          

 

          

 

阅读(1215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~