比如:String str1="abc<img src=\"http://a\b\c.jsp\"/>def\\ghi\\";
我用:str1=str1.replaceAll("\\","/");
这样会把所有的\都换成/的,而我是想只在<img>标签里把\替换成/,要怎么写呢?
我知道要用正则,但刚学不久也用得不熟,试了好久也没成功,向各位大虾们求助了,先谢啦!
上面求的结果应为:str1=abc<img src="http://a/b/c.jsp"/>def\ghi\

解决方案 »

  1.   

    不好意思,str1值有笔误,应为:String str1="abc <img src=\"http://a\\b\\c.jsp\"/>def\\ghi\\"; 
      

  2.   

    1、把原来的串中要特定处理的部分拿出来, String str2 = str1.split("<")[1].split(">")[0];
    2、对拿出来的串做处理                   str2 = str2.replaceAll("\\","/");
    3、放回去                               String str3 = str1.split("<")[0]+str2 + str1.split("<")[1].split(">")[1];
      

  3.   

    楼上的思路可以,但感觉不大好用,我想用正则表达式一步搞定,有没办法呢?
    用str1=str1.replaceAll("\\","/"); 中的"\\"书写正则表达式来匹配,应该可以实现吧?可惜本人技术有限,写不对,望这方面的高手出现.......
      

  4.   


    public static void main(String[] args) {
    String str="abc <img src=\"http://a\\\\b\\\\c.jsp\"/>def\\ghi\\";
    String repStr = "";
    Pattern pattern = Pattern.compile("(<img [^>]+>)",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = pattern.matcher(str);
    while(m.find()) {
    repStr = m.group(1).replaceAll("\\\\\\\\", "/");
    str = str.replace(m.group(1), repStr);
    }
    System.out.println(str);
    }输出:
    abc <img src="http://a/b/c.jsp"/>def\ghi\
      

  5.   


    public static void main(String[] args) {
    String str="abc <img src=\"http://a\\\\b\\\\c.jsp\"/>def\\\\ghi\\\\";
    String repStr = "";
    Pattern pattern = Pattern.compile("(<img [^>]+>)",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = pattern.matcher(str);
    while(m.find()) {
    repStr = m.group(1).replaceAll("\\\\\\\\", "/");
    str = str.replace(m.group(1), repStr);
    }
    System.out.println(str);
    }注意红色部分,因为这个"\"是正则中的符号,所以在测试时要转意,如果是直接从文件中读取就不用去理它了,