有这样一个字符串 HHHHHHHH<a href="/ART/IP%D3%EF%D2%F4.HTM">IP语音 </a>HHHHHH
字符串长度是不限的我想对"IP"这个字符串进行替换 , 变成 <font>IP </font> 但对双引号中的文字进行替换 改怎么写
变成下面这样
HHHHHHHH<a href="/ART/IP%D3%EF%D2%F4.HTM"> <font>IP </font>语音 </a>HHHHHH
除了URL中出现的字符以外, 其它的都要进行替换

解决方案 »

  1.   

    请考虑多个关键字替换 如有两个关键字,VoIP,Vonage
    VoIP--> <font>VoIP </font>
    Vonage ---><font>Vonage  </font>String content="VoIP市场<a href="VoIP">充斥</a><a href="Vonage">免费</a>服务Vonage束手无策 Vonage的增长已经停滞"
    替换成String content="<font>VoIP </font>市场<a href="VoIP">充斥</a><a href="Vonage">免费</a>服务<font>Vonage  </font>束手无策<font>Vonage  </font>的增长已经停滞"
      

  2.   

    这个问题比较头痛, 我也遇到过,匹配模板为XXX的字符串往往比较好办不匹配的只有这样的思路:1:先匹配一下你不要求匹配的东东:  如:先把URL中包含IP 的替换为一个唯一的串, XXBBXXX
    2. 然后将第一步替换后的串, 匹配 IP 并替换成<font>IP </font>3. 最后将XXBBXXX 替换为你IP, 这样才能解决根本问题.
    有点郁闷~期待楼下高手
      

  3.   


    public static String replace(String str, String pattern, String replacement) {
    return str.replaceAll(Pattern.quote(pattern)+"(?![^<]*>)", replacement);
    }
    public static void main(String[] args) {
    String s = "%%%HH%HH<a href=\"/ART/IP%D3%EF%D2%F4.HTM\">IP语音</a>H%HFHHEHH"; s = replace(s, "IP", "<font>IP</font>");
    s = replace(s, "H", "[H]");
    s = replace(s, "%", "[%]");

    System.out.println(s);
    }

      

  4.   

    wcwtitxu, 能不能帮我解释一下 ?![^<]*> 正则是什么意思, 
    我知道 ?![^<]不以“<”开头的字符, 但为什么不是 ?![^<].*>呢,直接用一个*就可以了呢?
      

  5.   

    好贴, 一起学习, 这些是正则表达式非捕获组的概念,搜到一帖,共勉:http://blog.csdn.net/lovingprince/archive/2008/08/06/2774819.aspx
      

  6.   


    public class SplitDemo {
        private static  String REGEX = "(VoIP|Vonage)(?!')";
        private static  String INPUT = "VoIP市场 <a href='VoIP'>充斥 </a> <a href='Vonage'>免费 </a>服务Vonage束手无策 Vonage的增长已经停滞";  
        public static void main(String[] args) {
            Pattern p = Pattern.compile(REGEX);
            Matcher m = p.matcher(INPUT);
            INPUT = m.replaceAll("<font>$1</font>");
            System.out.println(INPUT);
        }
    }
      

  7.   

    [^<] 不是 '<' 的其它任意字符
    [^<]* 任意个非 '<' 的字符
    [^<]*> 任意个 非 '<' 的字符 加一个 '>'
    比如:
    IP(?![^<]*>) 匹配 "IP" 但多一个条件, 就是 IP 后面不能是任意个非'<'的字符加'>'
    也就是说,匹配到的"IP" 后面如果出现 '>' 就必须先出现 '<'用意是,限制 "IP" 不被包括于 <....> 里面这样写可能还不够严瑾,在一些不规范的 HTML 中,有可能匹配不准确.
    但一般这样可以了.写完善了,效率又不好