我的Java源代码:
String result = "B123".replaceAll("B*","e");
System.out.println(result);
输出为:ee1e2e3e
。
为什么呢?
答案 0 :(得分:21)
'*'表示前一个字符的零个或多个匹配项。因此每个空字符串将替换为“e”。
您可能想要使用'+'代替:
replaceAll("B+", "e")
答案 1 :(得分:7)
你想要这个模式:
B+
您的代码将是:
String result = "B123".replaceAll("B+","e");
System.out.println(result);
“*”匹配“零或更多” - 而“零”包括B之前以及所有其他字符之间的任何内容。
答案 2 :(得分:1)
我花了一个多月的时间在一家大型科技公司工作,在正则表达式中修复*(splat!)的错误。我们维护了一个鲜为人知的UNIX OS。我的头几乎爆炸,因为它匹配与角色遭遇的零事件。谈谈通过自己的重新创建来理解的难题。在某些情况下,我们是双重替代。我无法弄清楚为什么代码是错误的,但是能够添加捕获特殊(错误)情况的代码并防止双子攻击并且没有破坏任何包含它的实用程序(包括sed和awk)。我很自豪能够修复这个错误,但正如已经提到的那样。
为了上帝的缘故,只需使用 + !!!!