Pattern pattern = Pattern.compile("(\\S+)\\s+(.+?)\\s+(\\S+)");
Matcher matcher = pattern.matcher("IA HEART RATE 184");
所以我的问题是,为什么以上模式在第2组中捕获了HEART RATE,所以'。+'不应该与一个或多个字符匹配,包括空格字符,所以第2组不应该捕获HEART,因为它后面是一个空格,并且应该匹配(。+?)\ s +正确吗?那么为什么它与心率匹配?
附言我正在使用matchs()
最佳答案
您尚未显示如何使用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/