C# 中使用正则表达式 Regex.Matches方法的几个应用[转]

C# 中使用正则表达式 Regex.Matches方法的几个应用[转]

用于正则表达式的 Regex.Matches静态方法的几种用法:

    //①正则表达式 = > 匹配字符串  
    string Text = @"This is a book , this is my book , Is not IIS";  
      
    //定义一个模式字符串,不仅仅是纯文本,还可以是正则表达式  
    string Pattern = "is";  
      
    MatchCollection Matches = Regex.Matches(  
        Text,  
        Pattern,  
        RegexOptions.IgnoreCase |         //忽略大小写  
        RegexOptions.ExplicitCapture |    //提高检索效率  
        RegexOptions.RightToLeft          //从左向右匹配字符串  
        );  
      
    Console.WriteLine("从右向左匹配字符串:");  
      
    foreach (Match NextMatch in Matches)  
    {                 
        Console.Write("匹配的位置:{0,2} ", NextMatch.Index);  
        Console.Write("匹配的内容:{0,2} ", NextMatch.Value);  
        Console.Write("/n");     
    }  
      
    Console.WriteLine();  
      
    //②匹配以大写I开头  
    //“/b”是转义序列,代表开头和结尾(一个字的边界,忽略空白或标点)  
    Pattern = @"/bI";  
    Matches = Regex.Matches(  
        Text,  
        Pattern,  
        RegexOptions.ExplicitCapture    //提高检索效率  
        );  
      
    Console.WriteLine("从左向右匹配字符串:");  
      
    foreach (Match NextMatch in Matches)  
    {  
        Console.Write("匹配的位置:{0} ", NextMatch.Index);  
        Console.Write("匹配的内容:{0} ", NextMatch.Value);  
        Console.Write("/n");  
    }  
      
    Console.WriteLine();  
      
    //③匹配以大写I开头,大写S结尾的字符串  
    //“/b”是转义序列,代表开头和结尾(一个字的边界,忽略空白或标点)  
    ///S*匹配任何不是空白的字符  
    Pattern = @"/bI/S*S/b";  
    Matches = Regex.Matches(  
        Text,  
        Pattern,  
        RegexOptions.ExplicitCapture    //提高检索效率  
        );  
      
    Console.WriteLine("从左向右匹配字符串:");  
      
    foreach (Match NextMatch in Matches)  
    {  
        Console.Write("匹配的位置:{0} ", NextMatch.Index);  
        Console.Write("匹配的内容:{0} ", NextMatch.Value);  
        Console.Write("/n");  
    }  
      
    Console.WriteLine();  
      
    //④匹配his 或者iis,其中忽略大小写  
    Pattern = @"[h|i]is";  
    Matches = Regex.Matches(  
        Text,  
        Pattern,  
        RegexOptions.IgnoreCase |         //忽略大小写  
        RegexOptions.ExplicitCapture    //提高检索效率  
        );  
      
    Console.WriteLine("从左向右匹配字符串:");  
      
    foreach (Match NextMatch in Matches)  
    {  
        Console.Write("匹配的位置:{0} ", NextMatch.Index);  
        Console.Write("匹配的内容:{0} ", NextMatch.Value);  
        Console.Write("/n");              
    }  
      
    Console.WriteLine();  
      
    //⑤对Url的分组匹配  
    Text = "http://192.168.0.1:2008";  
    Pattern = @"/b(/S+)://(/S+)(?::(/S+))/b";  
    Matches = Regex.Matches(Text, Pattern);  
      
    Console.WriteLine("从左向右匹配字符串:");  
      
    foreach (Match NextMatch in Matches)  
    {  
        Console.Write("匹配的位置:{0} ", NextMatch.Index);  
        Console.Write("匹配的内容:{0} ", NextMatch.Value);  
        Console.Write("/n");  
      
        for (int i = 0; i < NextMatch.Groups.Count; i++)  
        {  
            Console.Write("匹配的组 {0}:{1,4} ", i + 1, NextMatch.Groups[i].Value);  
            Console.Write("/n");  
        }  
    }  
      
    Console.Read();  

 输出结果为:

①从右向左匹配字符串:  
匹配的位置:43 匹配的内容:IS   
匹配的位置:35 匹配的内容:Is   
匹配的位置:22 匹配的内容:is   
匹配的位置:19 匹配的内容:is   
匹配的位置: 5 匹配的内容:is   
匹配的位置: 2 匹配的内容:is   
  
②从左向右匹配字符串:  
匹配的位置:35 匹配的内容:I   
匹配的位置:42 匹配的内容:I   
  
③从左向右匹配字符串:  
匹配的位置:42 匹配的内容:IIS   
  
④从左向右匹配字符串:  
匹配的位置:1 匹配的内容:his   
匹配的位置:18 匹配的内容:his   
匹配的位置:42 匹配的内容:IIS   
  
⑤从左向右匹配字符串:  
匹配的位置:0 匹配的内容:http://192.168.0.1:2008   
匹配的组 1:http://192.168.0.1:2008   
匹配的组 2:http   
匹配的组 3192.168.0.1   
匹配的组 42008

—上善若水,随遇而安。
老子

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119289.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常见状态码[通俗易懂]

    常见状态码[通俗易懂]常见状态码

    2022年4月22日
    50
  • 时序数据库 mysql_时序数据库 应用场景

    时序数据库 mysql_时序数据库 应用场景influxDB介绍时间序列数据是以时间字段为每行数据的标示,比如股票市场的价格,环境中的温度,主机的CPU使用率等。但是又有什么数据是不包含timestamp的呢?几乎所有的数据都可以打上一个timestamp字段。时间序列数据更重要的一个属性是如何去查询它。在查询的时候,对于时间序列我们总是会带上一个时间范围去过滤数据。同时查询的结果里也总是会包含timestamp字段。InfluxDB是一…

    2022年10月4日
    2
  • 差分数组详解[通俗易懂]

    差分数组详解[通俗易懂]题目:来先看一道裸题,有n个数。m个操作,每一次操作,将x~y区间的所有数增加z;最后有q个询问,每一次询问求出x~y的区间和。思路:很明显,直接用前缀和无法快速满足这个操作,所以我们就用到了查分数组。设a数组表示原始的数组;设d[i]=a[i]-a[i-1](1&lt;i≤n,d[1]=a[1]);设f[i]=f[i-1]+d[i](1&lt;i≤n,f[1]=d[1]=a[1]);设sum[i…

    2022年6月9日
    40
  • HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读

    HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读

    2021年12月31日
    50
  • 计算机学科的发展方向

    计算机学科的发展方向计算机专业毕业后大致的工作方向是软、硬、网、图四大类尤其以软件、网络为现今的首选从岗位上分,又可以分为技术道路、营销道路两大方向if你选择作技术,then从现在开始,牢记:天道酬勤!!!if你选择软件技术then每天都要用大量的时间学习高级语言,绝对不能仅限于学校的安排。优秀的程序员都是大学阶段就已经自学得非常深入了。ifyou选择网络技术,那么

    2022年5月10日
    47
  • c#事务处理(sqlTransaction)

    c#事务处理(sqlTransaction)事务:///<summary>///删除考勤///</summary>///<paramname=”dto”>Id</param>///<returns></returns>publicResultEntity<bool>Dele…

    2022年5月6日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号