关于JAVA中 正则表达式的零宽断言
最近做项目,要对产品的ID号进行处理, 其ID的格式为"24k43600xxxxx"处理时,我要把"24k4"后的"360"替换成"000",替换后成"24k40000xxxxx"
于是我这样写 id.replaceFirst("^(?<=\\w{4})\\d{3}","000")
打印结果并未替换,仍然输出"24k43600xxxxx"
但是,当我把开头的匹配符去掉后即id.replaceFirst("(?<=\\w{4})\\d{3}","000")便可成功得到"24k40000xxxxx"
想请问,为什么这里加了字符串的前端匹配就无易做图确的捕获“360”?
--------------------编程问答-------------------- 0分 版主说 拒绝回答。。。哈哈 --------------------编程问答-------------------- 呃-。-。。。偶分低啊~~~帮帮忙回答下吧。。。 --------------------编程问答-------------------- 建议直接替换,都是死的东西,我感觉没必要使用正则表达式
str = str.replace("24k4360", "24k4000"); --------------------编程问答-------------------- 嗯,你好像是没分了,可怜的娃! --------------------编程问答-------------------- 呃。。。这个是按规律生成的。也就是前4位是字母和数字,要替换的是从第5位开始到第7位的3位,并且数值不定。。。。虽然可以截字符串,不过我觉得用正则表达式效率高点。
刚才我发现大概了,要是想用前端匹配的话,要把^写进断言表达式中,如"(?<=^\\w{4})\\d{3}",可能是因为都是在判断位置的关系吧。 --------------------编程问答-------------------- java的正则有bug,解决方法
http://www.iteye.com/problems/51598
补充:Java , Java SE