gpt4 book ai didi

java - 有人可以帮我澄清我对这个正则表达式的理解吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:08 25 4
gpt4 key购买 nike

Pattern pattern = Pattern.compile("(\\S+)\\s+(.+?)\\s+(\\S+)");
Matcher matcher = pattern.matcher("IA HEART RATE 184");

所以我的问题是为什么上面的模式在第 2 组中捕获 HEART RATE。'.+' 不应该匹配一个或多个字符,包括空格字符所以第 2 组不应该捕获 HEART,因为它后面跟着一个空格那应该匹配 (.+?)\s+ 正确吗?那么为什么它匹配心率呢?

附言我正在使用 matches()

最佳答案

您还没有展示您是如何使用 matcher 的,但我猜您正在使用 its matches() method当你真正想要的是its find() method . matches() 需要将模式与整个 字符串进行匹配,唯一的方法是将第 2 组设为 HEART RATE。 (如果第 2 组只是 HEART,那么第 3 组将是 RATE,并且会有一个与模式中的任何内容都不匹配的尾随 184 .) 如果您使用的是 find(),则第 2 组将只是 HEART,因为这是允许模式匹配部分字符串所需的最小子字符串。

您可能还误解了 +? 的含义。它尝试尽可能少地匹配,同时仍然导致整体匹配。 (.+?)\s+ 完全能够匹配 HEART RATE ;只是它会更喜欢匹配 HEART ,只要这不会阻止模式的其余部分匹配。

关于java - 有人可以帮我澄清我对这个正则表达式的理解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com