广

ASP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    初探System.Text.RegularExpressions 命名空间

    2018-04-03 21:36:10 次阅读 稿源:互联网
    零七广告

      今天在看一个网站代码的时候,正好要使用到这个命名空间的类,然后呢,来来回回按F1,跑MSDN去查,百度搜啊,搞得头昏脑胀,群里发啊发,没人鸟啊,现在终于弄得有些眉目了,想把它写下来,怕以后忘记了,也怕自己的理解还有错误,把它写出来,请各位指证,也供各位学习。

      System.Text.RegularExpressions 命名空间是做什么的呢,System.Text.RegularExpressions 命名空间包含一些类,这些类提供对 .NET Framework 正则表达式引擎的访问。该命名空间提供正则表达式功能,可以从运行在 Microsoft .NET Framework 内的任何平台或语言中使用该功能。

      这样说,或许还是比较难理解的(如果您和我一样是第一次接触这个命名空间的话),那么我们来举个例子

      string text="I am yike";

      string pat=@"/w+/s+(yike)";

      那么我们可以拿text去适当匹配pat正则表达式,并且获取匹配的结果。

      现在的问题是,我们怎么去匹配,匹配的结果是什么,怎么去获得,适当匹配又是什么意思,为什么说适当呢?

      一.怎么去匹配

      1.创建Regex对象,创建这个对象的方法有几个,您可以按F1查看它的构造函数,这里我们使用其中的一种。

      Regex regex=new Regex(pat) //这里的pat是我们上面定义的string

      2.创建Match对象,这里我们通过regex对象的Match方法返回值来实例化这个类

      Match match=regex.Match(text) // 这里text是我们上面定义的string

      好,我们先来看下regex对象的Match静态方法是做什么的:在输入字符串中搜索正则表达式的匹配项,并将精确结果作为单个Match 对象返回

      回到例子,就是说,返回text中匹配pat的项,并且以Match对象返回,就是说我们把匹配pat的text放在Match对象中,那么我们怎么去获得呢?

      3.创建Group对象,这里我们通过match对象的Groups属性的返回值来实例化。

      Group group=match.Groups[1]

      我们看下Groups属性是怎么回事:获取由正则表达式匹配的组的集合。

      4.通过Group对象的value属性得到返回的值

      string result=group.value;

      对于这个result,它的值就是yike,为什么会是yike呢?开始我的想法跟您一样,其实这里它返回的只是正则表达式里面的()里面的值。现在至少您应该明白50%了,我们再换个例子,假如我这里的pat=@"(/w+)/s+(yike)",那么返回值会是什么呢?答案是am 和yike.它返回了两个值这也就是我们使用Groups组的理由了,如果是这样的话,那么我们这里的Groups[1]的值是am,Groups[2]的值是yike,当然他们属于同一个match对象,为什么这么说,难道有情况返回两个match对象的吗?

      答案是肯定的,我们再来看一个例子

      string text="I am yike,you are not yike";

      string pat=@"/w+/s+(yike)";

      Regex regex=new Regex(pat);

      MatchCollection matchCollection=regex.Matchs(text); //这里它匹配到了"am yike" 和 "not yike" .他们分别是一个match对象,两个对象构成了一 个  matchCollection

      int matchcount=matchCollection.Count; //返回匹配的match数,比如这里它是两个,那么返回2

      Match match=matchCollection.Item[0]; //这里我们通过item属性返回某个指定的match对象

      接下来的工作,相信您已经会做了,跟第一个例子一样。相信您已经比较清楚了,我们再做一个假定,假如我们把第一个例子的text也换成“I am yike,you are not yike”,那么显然它有两个匹配,但是对于第一种情况,它仍然只返回am yike.也就是返回第一个match对象。

      对了,我们还有一个适当匹配的问题没有解决,我们再举个例子吧。

      string text="I am YikE";

      string pat=@"/w+/s+(yike)"

      Regex regex=new Regex(pat,RegexOptions.IgnoreCase) //这里在实例化的时候我们增加一个参数,也就是调用另外一个构造函数,RegexOptions是一个

      //枚举,您可以查看F1去了解它的功能,这里 RegexOptions.IgnoreCase 是只匹配的时候不

      // 区分大小写 ,所以我们返回的result是am YikE 仍然匹配。 这里如果多个枚举我们用"|"分割,

      //比如 Regex regex=new Regex(pat,RegexOptions.IgnoreCase|RegexOptions.Multiline)

      是该提出我的问题的时候了,刚刚我们提到过Group[1],和Group[2].现在我的问题是,这里是否存在Group[0],如果存在,对于我们假定的例子,我们的Group[0]的值是不是等于"am yike"。

      转自:http://www.cnblogs.com/yike/

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告