zoukankan      html  css  js  c++  java
  • C#正则表达式类Match和Group类的理解

    正则表达式可以看做一种有特定功能的小型编程语言,在一段文本中定位子字符串。利用正则表达式可以快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合。正则表达式的基本语法可参见:深入浅出之正则表达式(一),深入浅出之正则表达式(二)。

    C#命名空间System.Text.RegularExpressions提供了支持正则表达式操作的类。这些类主要包括Regex,MatchCollection,Match,GroupCollection,Group,CaputerCollection和Caputer,下图表示了这些类之间的关系。



    正则表达式很重要的一个应用就是在文本中提取字符串,这一功能的实现主要是靠Match类和Group类,因此理解匹配和组的概念很重要。要实现在一段文本中查找URL功能,这个例子比较简单,只要调用Regex.Matches()方法就可以找到URL的集合。示例代码如下:

    文本中提取URL的C#代码
    1. public static void Main(string[]args)   
    2.     {        
    3.       stringtext="I'vefoundthisamazingURLathttp://www.sohu.com,andthenfindftp://ftp.sohu.comisbetter.";   
    4.       stringpattern=@"b(S+)://(S+)b"; //匹配URL的模式   
    5.       MatchCollectionmc=Regex.Matches(text,pattern);//满足pattern的匹配集合   
    6.       Console.WriteLine("文本中包含的URL地址有:");   
    7.       foreach(Matchmatchinmc)   
    8.       {   
    9.         Console.WriteLine(match.ToString());   
    10.       }   
    11.       Console.Read();   
    12.     }   
    13.     /*  
    14.     *运行后输出如下:  
    15.     *文本中包含的URL地址有:  
    16.     *http://www.sohu.com  
    17.     *ftp://ftp.sohu.com  
    18.     */  




    现在,要求变了,不仅要找出URL,还要找出每个URL的协议和域名地址,这时就要用到正则表达式的分组功能了。分组是要匹配的模式pattern用小括号括起来,分成不同的组,如可以把上面例子中的模式改为:string pattern = @"b(?<protocol>S+)://(?<address>S+)b";这样就用括号分成了两个组(实际上是三个组,因为匹配本身可以看做一个大组),"?<protocol>"和"?<address>"定义了每个组的别名protocol和address,这不是必须的,只是方便我们获取需要的组。示例代码如下:

      

    提取URL协议和地址的示例C#代码
    1. public static void Main(string[]args)   
    2.   {   
    3.     stringtext="I'vefoundthisamazingURLathttp://www.sohu.com,andthenfindftp://ftp.sohu.comisbetter.";   
    4.     stringpattern=@"b(?<protocol>S+)://(?<address>S+)b";//匹配URL的模式,并分组   
    5.     MatchCollectionmc=Regex.Matches(text,pattern);//满足pattern的匹配集合   
    6.     Console.WriteLine("文本中包含的URL地址有:");   
    7.     foreach(Matchmatchinmc)   
    8.     {   
    9.       GroupCollectiongc=match.Groups;   
    10.       stringoutputText="URL:"+match.Value+";Protocol:"+gc["protocol"].Value+";Address:"+gc["address"].Value;   
    11.       Console.WriteLine(outputText);   
    12.     }   
    13.     Console.Read();   
    14.   }   
    15.   /**  
    16.   *运行后输出如下:  
    17.   *文本中包含的URL地址有:  
    18.   *URL:http://www.sohu.com;Protocol:http;Address:www.sohu.com  
    19.   *URL:ftp://ftp.sohu.com;Protocol:ftp;Address:ftp.sohu.com  
    20.   */  
  • 相关阅读:
    insertSelective和insert的区别?
    @Valid和@BindingResult
    restful的put请求(坑),和HttpServletRequest做参数的作用
    ios网络编程读书笔记
    命令行杂记
    iOS杂记
    git项目收藏
    _Function_,_PRETTY_FUNCTION的区别
    iOS连接收藏
    转自别人的话
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1486249.html
Copyright © 2011-2022 走看看