栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么重复捕获组返回这些字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么重复捕获组返回这些字符串?

重复捕获组:组号保持不变

由定义的组

(..)
是组1。
+
量化器重复它。每当引擎能够重复该组(匹配两个字符)时,组1就会被覆盖。

  • 引擎开始匹配时,捕获
    aa
    到组1
  • 然后捕获
    bb
    到组1
  • 然后捕获
    cc
    到组1。

当您检查组1时,引擎将返回

cc
。所有其他捕获都将丢失。

(唯一的例外是.NET引擎,它也返回

cc
,但也可以让你的中间感谢CaptureCollection对象捕捉检查。这将包括
aa
bb
cc
)。

使用

(..)+(...)
,为什么第1组包含
aa
?回溯!

为了理解这一点,我们再次需要遵循正则表达式引擎的路径。

  • 再次,当引擎开始匹配时,它捕获
    aa
    到组1
  • 再次,它重复该
    (..)
    组并捕获
    bb
    到组1
  • 再次,它重复该
    (..)
    组并捕获
    cc
    到组1
  • 引擎现在尝试匹配
    (...)
    。失败:没有字符可消耗。
  • 发动机 回溯 无论是在字符串中的正则表达式。在
    +
    一次或多次,并且我们匹配的手段
    ..
    三次,所以我们可以放弃一个,或者甚至是两个。在此阶段,引擎放弃了量化
    (..)+
    组的最后一个匹配,即
    cc
    。我们回到了第1组的时间
    bb
  • 引擎
    (...)
    再次尝试匹配。仅剩两个字符:
    cc
    ,因此再次失败。
  • 引擎通过放弃量化组的最后一个匹配项()来 回溯 。在这一阶段,第1组再次出现。
    (..)+``bb``aa
  • 引擎
    (...)
    再次尝试匹配。成功:组2为
    bbc
    ,组1为
    aa

参考

  • 捕获组编号和命名:血腥细节
  • 反向引用


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号