高分求教,如何编写正则表达式 去掉html标签

hongfarge 2006-10-26 10:51:26
包含css/javascript里面的内容.

<style>
.title0 {font-size:17px;font-family:arial;font-weight:bold;text-decoration:none;color:#FFFFFF;}
A.title2:link {COLOR: #000000; TEXT-DECORATION: none}
A.title2:visited {COLOR: #000000; TEXT-DECORATION: none}
A.title2:active {COLOR: #ff0000; TEXT-DECORATION: none}
A.title2:hover {COLOR: #ff0000; TEXT-DECORATION: none}
</style>

如上,不单单取出<.*?>
...全文
472 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zzhzzh204553 2006-11-15
[/<//?/w+(/s+/S+?(=([/'/\"]?).*?[^//]/3)?)*/W*>/]
理解起来很麻烦啊.

下面是我在项目中写的一个方法.
/**
* 过滤掉所有的标签.
*
* @param input 输入字符串.
* @return
*/
public static String omitTag(String input) {
String regex = "<[\\w\\\"\\s\\.:=/_]*>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

return matcher.replaceAll("");
}

<[\\w\\\"\\s\\.:=/_]*>
表示<...>的东西全部不要,
把可能会出现的字符全部写进方括号.
\\w是\w的转义,\\s是\s的转义等.
\w字母,\\反斜杠,\"双引号,\s空格,等等.
回复
gzdiablo 2006-10-27
.........java的 不知道这么写行不
回复
gzdiablo 2006-10-27
<(style|script)[^>]*>(?:\s?|.)*</\1>

表达式在此直接replaceAll即可 把style|script改成其他的标签也可以 但不支持代嵌套的标签

PS:拿分来 呵呵
回复
twenty_three 2006-10-26
"[/<//?/w+(/s+/S+?(=([/'/\"]?).*?[^//]/3)?)*/W*>/]"
回复
twenty_three 2006-10-26
/**
* @param args
*/
public static void main(String[] args) {
// <style>
// .title0 {font-size:17px;font-family:arial;font-weight:bold;text-decoration:none;color:#FFFFFF;}
// A.title2:link {COLOR: #000000; TEXT-DECORATION: none}
// A.title2:visited {COLOR: #000000; TEXT-DECORATION: none}
// A.title2:active {COLOR: #ff0000; TEXT-DECORATION: none}
// A.title2:hover {COLOR: #ff0000; TEXT-DECORATION: none}
// </style>
StringBuffer sb = new StringBuffer();
sb.append("<style>");
sb.append(".title0 {font-size:17px;font-family:arial;font-weight:bold;text-decoration:none;color:#FFFFFF;}");
sb.append("A.title2:link {COLOR: #000000; TEXT-DECORATION: none}");
sb.append("A.title2:visited {COLOR: #000000; TEXT-DECORATION: none}");
sb.append("A.title2:active {COLOR: #ff0000; TEXT-DECORATION: none}");
sb.append("A.title2:hover {COLOR: #ff0000; TEXT-DECORATION: none}");
sb.append("</style>");
String str = sb.toString();
System.out.println(str);
String formatStr = str.replaceAll("[/<//?/w+(/s+/S+?(=([/'/\"]?).*?[^//]/3)?)*/W*>/]" , "");
System.out.println(formatStr);
}
回复
hongfarge 2006-10-26
假如使用<.*?>这个正则表达式的话,不会去掉:

.title0 {font-size:17px;font-family:arial;font-weight:bold;text-decoration:none;color:#FFFFFF;}
A.title2:link {COLOR: #000000; TEXT-DECORATION: none}
A.title2:visited {COLOR: #000000; TEXT-DECORATION: none}
A.title2:active {COLOR: #ff0000; TEXT-DECORATION: none}
A.title2:hover {COLOR: #ff0000; TEXT-DECORATION: none}


回复
zh__ua 2006-10-26
把需求说清楚啊,如果只是去掉,可以把<.+?>替换成""
回复
没必要一步完成吧,

可以先替换
<style[^>]*>.*</style>
=> ""

再进行
<.*?>
=> ""

推荐:
http://www.regexlab.com/
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2006-10-26 10:51
社区公告
暂无公告