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

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

PS我正在使用matches()

4

1 回答 1

3

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

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

于 2012-08-28T17:03:44.283 回答