有一段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
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
String regex = "(?id)</?+(?!image|newVideo).*?>";
System.out.println(html.replaceAll(regex, ""));
如果需要区分大小写,把(?id)变成(?d)
"(?id)</?+(?!image|newVideo).*?>" 这种写法没见过啊, 是不是java自己的正则写法, 不是通用的方式(才疏学浅, 莫笑话啊)
我采用了种子较负责的方式,
"(?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();
}
<!-- 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
-->
貌似表示匹配i,m,a,g,e,n,e,t,V,i,d,e,o外的字符,而不是“image”和“netVideo”外的字符串