<![CDATA[ asdasdasd<P>asdasd<a><b>asda</a>dsasd]]><![CDATA[ 阿嫂大<P>asda阿嫂大sd<a><b>嫂</a>dsasd]]>怎么删除所有<![CDATA[ ]]>中间的所有闭合<>标签前提是这些<>的闭合标签必须都在<![CDATA[ ]]>中间

解决方案 »

  1.   

    这个应该不难吧
    对于<![CDATA[XXXXX]]>
    可以用2次正则 
    第一次找到String str = XXXXX
    第二次 把str中的<>替换成 空白
    最后组装输出<![CDATA[str]]>
      

  2.   

    看看这样符不符合你的要求。public class TestReg {
    public static void main(String[] args) {
    String src = "<![CDATA[ asdasdasd <P>asdasd <a> <b>asda </a>dsasd]]> <![CDATA[ 阿嫂大 <P>asda阿嫂大sd <a> <b>嫂 </a>dsasd]]> ";
    Pattern ptn = Pattern.compile("<!\\[CDATA\\[(.*?)\\]\\]>");
    Matcher matcher = ptn.matcher(src);
    StringBuilder sb = new StringBuilder(src.length());
    int index = 0;
    while(matcher.find()){
    sb.append(src.substring(index, matcher.start()));
    index = matcher.end();
    sb.append(matcher.group().replaceAll("</?\\w++>", ""));
    }
    System.out.println(sb.toString());
    }
    }
      

  3.   

    发现一个bug,少了一句import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class TestReg {
    public static void main(String[] args) {
    String src = "<![CDATA[ asdasdasd <P>asdasd <a> <b>asda </a>dsasd]]> <![CDATA[ 阿嫂大 <P>asda阿嫂大sd <a> <b>嫂 </a>dsasd]]>  hello";
    Pattern ptn = Pattern.compile("<!\\[CDATA\\[(.*?)\\]\\]>");
    Matcher matcher = ptn.matcher(src);
    StringBuilder sb = new StringBuilder(src.length());
    int index = 0;
    while(matcher.find()){
    sb.append(src.substring(index, matcher.start()));
    index = matcher.end();
    sb.append(matcher.group().replaceAll("</?\\w++>", ""));
    }
    sb.append(src.substring(index));
    System.out.println(sb.toString());
    }
    }
      

  4.   

    calibure 谢谢你的方法,很有用。
    我想问一下,有没有只用一个正则就全部替换的方法呢?