最近做项目,要对产品的ID号进行处理,  其ID的格式为"24k43600xxxxx"
处理时,我要把"24k4"后的"360"替换成"000",替换后成"24k40000xxxxx"
于是我这样写 id.replaceFirst("^(?<=\\w{4})\\d{3}","000")
打印结果并未替换,仍然输出"24k43600xxxxx"
但是,当我把开头的匹配符去掉后即id.replaceFirst("(?<=\\w{4})\\d{3}","000")便可成功得到"24k40000xxxxx"
想请问,为什么这里加了字符串的前端匹配就无法正确的捕获“360”?

解决方案 »

  1.   

    建议直接替换,都是死的东西,我感觉没必要使用正则表达式str = str.replace("24k4360", "24k4000");
      

  2.   

    呃这个是按规律生成的。也就是前4位是字母和数字,要替换的是从第5位开始到第7位的3位,并且数值不定。虽然可以截字符串,不过我觉得用正则表达式效率高点。
    刚才我发现大概了,要是想用前端匹配的话,要把^写进断言表达式中,如"(?<=^\\w{4})\\d{3}",可能是因为都是在判断位置的关系吧。
      

  3.   

    java的正则有bug,解决方法
    http://www.iteye.com/problems/51598