Pattern pattern = Pattern.compile("(\\S+)\\s+(.+?)\\s+(\\S+)");
Matcher matcher = pattern.matcher("IA HEART RATE 184");
所以我的问题是为什么上面的模式捕获组2中的HEART RATE。不应该'。+'匹配一个或多个字符,包括空格char,所以不应该组2捕获HEART,因为它后跟一个空格那应该匹配(。+?)\ s +正确吗?那为什么它与心率相匹配?
P.S。我正在使用matches()
答案 0 :(得分:3)
您尚未展示自己如何使用matcher
,但我猜您正在使用its matches()
method,而您真正想要的是its find()
method。 matches()
需要将模式与整个字符串相匹配,唯一的方法是将第2组设为HEART RATE
。 (如果第2组仅为HEART
,则第3组将为RATE
,并且会有一个跟踪 184
与模式中的任何内容不匹配。)如果您使用的是{{1然后,组2只是find()
,因为这是允许模式匹配部分字符串所需的最小子字符串。
您也可能误解了HEART
的含义。它尝试尽可能少地匹配,同时仍然导致整体匹配。 +?
完全有能力匹配(.+?)\s+
;它只是更喜欢匹配HEART RATE
,只要这不会阻止模式的其余部分匹配。