source = source.replaceFirst("%start%\\.*?%end%", "");不要凭空想象就去造正则表达式。

解决方案 »

  1.   

    楼上教训的时,那段\u00000000-\uffffffff确实是我想当然做出来的,但你给的那个表达式似乎也不行,以下是我的测试代码
    String source = "A%start%f\nffff[]xaxfFffffff%end%B";
    System.out.println("before replaceAll, source : " + source);
    source = source.replaceFirst("%start%\\.*?%end%", "@");
    System.out.println("after replaceAll,  source : " + source);
      

  2.   

    上面的测试代码中的source应该加上中文:
    String source = "A%start%f\nffff[]xaxf中文Fffffff%end%B";
      

  3.   

    成功了,正确的表达式是"%start%[\r\n\t|\u00000000-\uFFFFFFFF]*?%end%",测试代码为
    String source = "A%start%f\nffff[]xaxfF中文ffffff%end%B";
    System.out.println("before replaceAll, source : " + source);
    //        source = source.replaceFirst("(a)?\\S(b)?", "e");
    source = source.replaceFirst("%start%[\r\n\t|\u00000000-\uFFFFFFFF]*?%end%", "@");
    System.out.println("after replaceAll,  source : " + source);
    之前的错误是我误将\uFFFFFFFF写成\uffffffff,大小写是有区别的