为什么我在java中一次Matcher.find()的执行中得到所有的匹配?[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我在java中一次Matcher.find()的执行中得到所有的匹配?[重复]相关的知识,希望对你有一定的参考价值。

我的输入字符串是

"PING www.abc.com (172.217.160.132) 56(84)字节的数据。

64字节来自maa03s29-in-f4.1e100.net(172.217.160.132):icmp_seq=1 ttl=51 time=50.9 ms。

来自 maa03s29-in-f4.1e100.net (172.217.160.132) 的 64 个字节:icmp_seq=2 ttl=51 time=67.0 ms。

来自 maa03s29-in-f4.1e100.net (172.217.160.132) 的 64 个字节:icmp_seq=3 ttl=51 time=81.6 ms。

而我的模式是

(\d+ bytes from [\w\W]+ \(\d+(\.\d+){3,3}\): icmp_seq=\d+ ttl=\d+ time=[\d+.]+ ms)

我执行

       int count++;
      while(matcher.find()) {
        count++;
System.out.print(count+" ");}

我的预期产出 1 2 3 但我的实际产量1当我试图在 while 循环中打印 matcher.group 时,我得到的是

来自 maa03s29-in-f4.1e100.net (172.217.160.132) 的 64 个字节:icmp_seq=1 ttl=51 time=50.9 ms。

来自 maa03s29-in-f4.1e100.net (172.217.160.132) 的 64 个字节:icmp_seq=2 ttl=51 time=67.0 ms。

来自 maa03s29-in-f4.1e100.net (172.217.160.132) 的 64 个字节:icmp_seq=3 ttl=51 time=81.6 ms。

为什么在第一次执行时就能找到所有的匹配?

答案

[...] [\w\W]+ [...] .+[...]

(\d+ bytes from .+ \(\d+(\.\d+){3,3}\): icmp_seq=\d+ ttl=\d+ time=[\d+.]+ ms)
#                ^^
  • [\w\W]+ [...] from [...] (172.....)
  • .+ [...] [...]

以上是关于为什么我在java中一次Matcher.find()的执行中得到所有的匹配?[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JAVA正则表达式,matcher.find和 matcher.matches的区别

正则表达式Matcher.find报错 java.lang.StackOverflowError解决

Matcher.find() 如何工作[重复]

java正则表达式中,matches和find的效率问题

当 Matcher.find() 运行时间过长时,如何终止它?

正则表达式里matcher.find()一直为false