【发布时间】:2009-02-03 14:24:50
【问题描述】:
我的 Java 源代码:
String result = "B123".replaceAll("B*","e");
System.out.println(result);
输出为:ee1e2e3e。
为什么?
【问题讨论】:
我的 Java 源代码:
String result = "B123".replaceAll("B*","e");
System.out.println(result);
输出为:ee1e2e3e。
为什么?
【问题讨论】:
'*' 表示前一个字符的零个或多个匹配。所以每个空字符串都会被替换成一个“e”。
您可能想使用“+”代替:
replaceAll("B+", "e")
【讨论】:
你想要这个作为你的模式:
B+
你的代码是:
String result = "B123".replaceAll("B+","e");
System.out.println(result);
“*”匹配“零或多个” - 而“零”包括 B 之前以及所有其他字符之间的空。
【讨论】:
我在一家大型科技公司工作了一个多月,修复了正则表达式中带有 * (splat!) 的错误。我们维护了一个鲜为人知的 UNIX 操作系统。我的头几乎要爆炸了,因为它匹配零次与角色的相遇。谈论一个很难通过您自己的重新创建来理解的错误。在某些情况下,我们进行了双重替代。我不知道为什么代码是错误的,但能够添加捕获特殊(错误)情况的代码并防止双重替换,并且没有破坏任何包含它的实用程序(包括 sed 和 awk)。我很自豪能够修复这个错误,但正如我已经提到的那样。
看在上帝的份上,请使用 + !!!!
【讨论】: