文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#正则表达式匹配引擎是什么

2023-06-17 23:28

关注

这篇文章主要介绍“C#正则表达式匹配引擎是什么”,在日常操作中,相信很多人在C#正则表达式匹配引擎是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#正则表达式匹配引擎是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

现在,我们通过一个组结构来理解一个稍微复杂的例子。看下面的C#正则表达式匹配引擎的细节例子:

string text = "abracadabra1abracadabra2abracadabra3";        string pat = @"        ( # ***个组的开始         abra # 匹配字符串abra         ( # 第二个组的开始         cad # 匹配字符串cad         )? # 第二个组结束(可选)        ) # ***个组结束        + # 匹配一次或多次        ";        //利用x修饰符忽略注释        Regex r = new Regex(pat, "x");        //获得组号码的清单        int[] gnums = r.GetGroupNumbers();        //***匹配        Match m = r.Match(text);        while (m.Success)         {        //从组1开始         for (int i = 1; i < gnums.Length; i++)        {        Group g = m.Group(gnums[i]);        //获得这次匹配的组        Console.WriteLine("Group"+gnums[i]+"=["+g.ToString()+"]");        //计算这个组的起始位置和长度        CaptureCollection cc = g.Captures;        for (int j = 0; j < cc.Count; j++)         {         Capture c = cc[j];         Console.WriteLine(" Capture" + j + "=["+c.ToString()         + "] Index=" + c.Index + " Length=" + c.Length);         }        }        //下一个匹配         m = m.NextMatch();         }

这个C#正则表达式匹配引擎的细节实例的输出如下所示:

Group1=[abra]        Capture0=[abracad] Index=0 Length=7        Capture1=[abra] Index=7 Length=4        Group2=[cad]        Capture0=[cad] Index=4 Length=3        Group1=[abra]        Capture0=[abracad] Index=12 Length=7        Capture1=[abra] Index=19 Length=4        Group2=[cad]        Capture0=[cad] Index=16 Length=3        Group1=[abra]        Capture0=[abracad] Index=24 Length=7        Capture1=[abra] Index=31 Length=4        Group2=[cad]        Capture0=[cad] Index=28 Length=3

我们首先从考查字符串pat开始,pat中包含有表达式。***个capture是从***个圆括号开始的,然后表达式将匹配到一个abra。第二个capture组从第二个圆括号开始,但***个capture组还没有结束,这意味着***个组匹配的结果是abracad ,而第二个组的匹配结果仅仅是cad。因此如果通过使用?符号而使cad成为一项可选的匹配,匹配的结果就可能是abra或abracad。然后,***个组就会结束,通过指定+符号要求表达式进行多次匹配。

现在我们来看看匹配过程中发生的情况。首先,通过调用Regex的constructor方法建立表达式的一个实例,并在其中指定各种选项。在这个例子中,由于在表达式中有注释,因此选用了x选项,另外还使用了一些空格。打开x选项,表达式将会忽略注释和其中没有转义的空格。

然后,取得表达式中定义的组的编号的清单。你当然可以显性地使用这些编号,在这里使用的是编程的方法。如果使用了命名的组,作为一种建立快速索引的途径这种方法也十分有效。

接下来是完成***次匹配。通过一个循环测试当前的匹配是否成功,接下来是从group 1开始重复对组清单执行这一操作。在这个例子中没有使用group 0的原因是group 0是一个完全匹配的字符串,如果要通过收集全部匹配的字符串作为一个单一的字符串,就会用到group 0了。

我们跟踪每个group中的CaptureCollection。通常情况下每次匹配、每个group中只能有一个capture,但本例中的Group1则有两个capture:Capture0和Capture1。如果你仅需要Group1的ToString,就会只得到abra,当然它也会与abracad匹配。组中ToString的值就是其CaptureCollection中***一个Capture的值,这正是我们所需要的。如果你希望整个过程在匹配abra后结束,就应该从表达式中删除+符号,让regex引擎知道我们只需要对表达式进行匹配。

到此,关于“C#正则表达式匹配引擎是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯