gpt4 book ai didi

java - 试图理解这个正则表达式代码

转载 作者:行者123 更新时间:2023-12-02 05:29:06 24 4
gpt4 key购买 nike

我有以下代码。据我所知,程序应该打印 0123445。相反,它打印 01234456。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex2 {

public static void main(String[] args) {
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while(b=m.find()){
System.out.print(m.start() + m.group());
}
System.out.println();
}

}

我认为应该发生以下情况-由于搜索模式是\d*,

  1. 它在位置 0 处找到匹配项,但由于匹配项不是数字,因此仅打印 0
  2. 它在位置 1 找到命中,但同样,不是数字,而是打印 0
  3. 在位置 2 处查找匹配项,并且由于我们正在查找\d*,因此匹配项为 34,因此它会打印 234。
  4. 移动到位置 4,找到一个 hit,但由于 hit 不是数字,因此只打印 4。
  5. 移动到位置 5,找到一个 hit,但由于 hit 不是数字,因此只打印 5。

在这一点上,据我所知,应该完成。但由于某种原因,程序也返回了 6。

如果有人能解释一下,我将不胜感激。

最佳答案

\d* 匹配零(!)或更多数字,这就是为什么它在 0 和 1 处返回一个空字符串作为匹配,在位置 2 处匹配 34,在位置 4 和 5 处再次匹配空字符串。剩下要匹配的点是一个空字符串。并且这个空字符串也匹配\d* (因为空字符串包含零位数字),这就是为什么在位置 6 处还有另一个匹配。

为了对比,请尝试使用\d+ (匹配一个或多个数字)作为模式,看看会发生什么。

关于java - 试图理解这个正则表达式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com