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() methodmatches()需要将模式与整个字符串匹配,唯一的方法是将组2设置为HEART RATE。 (如果第2组只是HEART,则第3组将是RATE,并且尾随 184将与模式中的任何内容都不匹配。)如果您使用的是find(),则第2组将只是HEART,因为这是最小的子字符串允许模式匹配字符串的一部分的必要条件。

您可能还会误解+?的含义。它会尝试尽可能少地进行匹配,但仍然会导致整体匹配。 (.+?)\s+非常有能力匹配HEART RATE ;只是它会更喜欢匹配HEART ,只要不阻止其余模式匹配即可。

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

10-10 23:20