我的Java源代码: String result = "B123".replaceAll("B*","e"); System.out.println(result); 输出结果为:ee1e2e3e。为什么?
你想在你的模式中使用这个:B+ 您的代码应该是这样的:String result = "B123".replaceAll("B+","e"); System.out.println(result); "*"代表“零个或多个”——而“零”包括B之前的所有内容,以及其他所有字符之间的任何内容。
我在一家大型科技公司工作了一个多月,修复了正则表达式中 *(扩展符)的一个错误。我们维护着一个鲜为人知的UNIX操作系统。我的脑袋几乎要爆炸了,因为它匹配到了字符遇到零次的情况。这可真是一个难以通过自己的重现来理解的难题。在某些情况下我们进行了双重替换。我想不出代码错在哪里,但是我能够添加代码来捕捉特殊(错误)情况并防止双重替换,而且没有破坏任何包含它的程序(包括sed和awk)。我很自豪能够解决这个错误,但如已经提到的,简单地使用“+”就可以解决问题啊!