shi*_*t66 4 java regex regex-greedy
有一个关于正则表达式的问题并试图回答我发现了另一个奇怪的事情.
String x = "X";
System.out.println(x.replaceAll("X*", "Y"));
Run Code Online (Sandbox Code Playgroud)
这打印YY.为什么??
String x = "X";
System.out.println(x.replaceAll("X*?", "Y"));
Run Code Online (Sandbox Code Playgroud)
这打印YXY
为什么不情愿的正则表达式与'X'字符不匹配?有"noting"X"nothing"但为什么首先不匹配三个符号并匹配两个然后一个而不是三个?和第二个正则表达式只匹配"nothing"s而不是X?
让我们依次考虑它们:
"X".replaceAll("X*", "Y")
Run Code Online (Sandbox Code Playgroud)
有两场比赛:
X匹配,并替换为Y.Y添加到输出中.最终结果:YY.
"X".replaceAll("X*?", "Y")
Run Code Online (Sandbox Code Playgroud)
还有两场比赛:
Y添加到输出中.此位置的字符X未被匹配消耗,因此逐字复制到输出中.Y添加到输出中.最终结果:YXY.