有一段html标签, 我要去除里面 “image” 和 “netVideo” 以外的所有其他标签,下面的方式去不干净, 如果标签的首字母是 image|netVideo  其中的一个,那么这个标签就去除不掉, 请问这个正则表达式该怎么写啊 ,各位大侠请不吝指点
    public static void main(String[] args)
    {
      String s = "<div align=\"left\">sad</div><P>ss<P>a<image src=''/>  ss";
      String reg = "<[^image|netVideo][^>]*>";
     System.out.println(s.replaceAll(reg, ""));
      
    }   实际输出: <div align="left">sadssa<image src=''/>  ss
   预期输出: sadssa<image src=''/>  ss
 

解决方案 »

  1.   

        String html = "<div align=\"left\">sad</div><P>ss<P>a<image src=''/>  ss<newVideo \r\n abc='xyz'>sss</newVideo>  abc <Image>xxx</IMAGE>";
        String regex = "(?id)</?+(?!image|newVideo).*?>";
        System.out.println(html.replaceAll(regex, ""));
    如果需要区分大小写,把(?id)变成(?d)
      

  2.   

    注释<!--注释--> 也需要过滤掉 
    "(?id)</?+(?!image|newVideo).*?>" 这种写法没见过啊, 是不是java自己的正则写法, 不是通用的方式(才疏学浅, 莫笑话啊)
    我采用了种子较负责的方式, 
      

  3.   

    注释<!--注释--> 也需要过滤掉 
    "(?id)</?+(?!image|newVideo).*?>" 这种写法没见过啊, 是不是java自己的正则写法, 不是通用的方式(才疏学浅, 莫笑话啊)
    我采用了种较负责的方式, 不过不是很喜欢这种, 希望能用一个语句来实现 
        public static String removeLab(String content)
        {
            if (content == null || "".equals(content.trim()))
            {
                return "";
            }
            StringBuffer sb = new StringBuffer();
            Pattern p = Pattern.compile("<[^>]*>");
            Matcher m = p.matcher(content.replaceAll("\\&[a-zA-Z]{1,10};", ""));
            while (m.find())
            {
                String tmp = m.group();
                m.appendReplacement(sb, "");
                if (tmp.startsWith("<image") || tmp.startsWith("<netVideo"))
                {
                    sb.append(tmp);
                }
            }
            m.appendTail(sb);
            return sb.toString().trim();
        }
      

  4.   

    话说,我这个是不是Java的,你倒是用Java运行下看看啊注释的做法是,先正则匹配注释,把注释先保存,然后把注释用很安全的占位符先替换掉,然后再用前面我的正则替换掉。最后,用保存下来的注释替换掉之前的占位符。比如
    <!-- START -->
    <div align="left">sadssa<image src=''/>  ss
    <!-- 
    END
     -->
    先用Map保存
    __COMMENT_PLACEHOLDER_0 = "<!-- START -->"
    __COMMENT_PLACEHOLDER_1 = "<!-- \r\nEND\r\n -->"然后把文本替换为
    __COMMENT_PLACEHOLDER_0
    <div align="left">sadssa<image src=''/>  ss
    __COMMENT_PLACEHOLDER_1
    最后用我前面写的正则替换成
    __COMMENT_PLACEHOLDER_0
    sadssa<image src=''/>  ss
    __COMMENT_PLACEHOLDER_1在把Map里面的占位符替换回去
    <!-- START -->
    sadssa<image src=''/>  ss
    <!-- 
    END
     -->
      

  5.   

    [^image|netVideo] = [^imagentVdo]
    貌似表示匹配i,m,a,g,e,n,e,t,V,i,d,e,o外的字符,而不是“image”和“netVideo”外的字符串
      

  6.   

    太高兴了,弄了好久没弄出来,太感谢lz和school104了