当前位置:编程学习 > JAVA >>

关于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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,