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

时间:2012-08-28 17:00:17

标签: java regex

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()

1 个答案:

答案 0 :(得分:3)

您尚未展示自己如何使用matcher,但我猜您正在使用its matches() method,而您真正想要的是its find() methodmatches()需要将模式与整个字符串相匹配,唯一的方法是将第2组设为HEART RATE。 (如果第2组仅为HEART,则第3组将为RATE,并且会有一个跟踪 184与模式中的任何内容不匹配。)如果您使用的是{{1然后,组2只是find(),因为这是允许模式匹配部分字符串所需的最小子字符串。

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