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

为什么我的正则表达式可以在RegexPlanet和regex101上运行,而不能在我的代码中运行?

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

为什么我的正则表达式可以在RegexPlanet和regex101上运行,而不能在我的代码中运行?

一个

Matcher
对象允许您对其进行多次查询,以便您可以查找表达式,获取组,再次查找表达式,获取组,等等。

这意味着在每次调用后,它都会保持状态-匹配成功后产生的组以及继续搜索的位置。

当您连续运行两个匹配/查找方法时,您将得到:

  1. matches()
    -匹配字符串的开头,设置组。
  2. find()
    -尝试在先前匹配/找到的出现之后找到模式的下一个出现,设置组。

但是,当然,在您的情况下,文本不包含 两次
出现的模式,仅包含一次。因此,尽管

matches()
成功并设置了适当的组,
find()
然后无法找到另一个匹配项,并且这些组无效(匹配/查找失败后无法访问这些组)。

这就是为什么您收到错误消息的原因。

现在,如果你只是玩弄这个,看看之间的区别

matches
find
,那么就没有什么错在节目中有他们两个。但是您需要
reset()
在它们之间使用,这将导致
find()
不要尝试从
matches()
停止的位置继续(如果
matches()
成功,它将始终失败)。相反,它将从头开始扫描,就好像您有一个全新的一样
Matcher
。它会成功并为您提供团体。

但是正如这里的其他答案所暗示的那样,如果您不只是尝试比较

matches
and 的结果
find
,而是想要匹配您的模式并获得结果,那么您应该只选择
其中 之一。

  • matches()
    将尝试匹配整个字符串。因此,如果成功,则
    find()
    在它之后运行将永远不会成功-因为它从字符串末尾开始搜索。如果你使用
    matches()
    ,你不需要像锚
    ^
    ,并
    $
    在开始和你的模式的结束。
  • find()
    将尝试匹配字符串中的任何位置。它将从左侧开始扫描,但不需要实际的匹配从此处开始。也可以不止一次使用它。
  • lookingAt()
    会尝试匹配字符串的开头,但不一定匹配完整的字符串。就像
    ^
    在模式开始时有一个锚点一样。

因此,您可以选择其中之一适合自己,然后使用它,然后可以使用组。尝试使用组之前,请始终测试匹配是否成功!



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

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

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