免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5431 | 回复: 5
打印 上一主题 下一主题

java中如何实现php中类似strip_tags的功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 22:19 |只看该作者 |倒序浏览
如题。

就是从一段文本中清楚html、js代码。

例如:从<a class='currentCate'  href="http://www.vancl.com/polos.htm">POLO衫</a>     中得到POLO衫

论坛徽章:
0
2 [报告]
发表于 2009-04-07 11:55 |只看该作者
正则过滤就OK了阿

论坛徽章:
0
3 [报告]
发表于 2009-04-07 15:48 |只看该作者
import java.util.regex.*;
import java.util.List;
import java.util.ArrayList;

/**
* @author nathena.yang
* 实现php中strip_tags的功能
* @version : 200947v.0.1(未测试)
*/
public class StripTags
{
        private StripTagsRegExp reg = new StripTagsRegExp();

        public String parse(String html)
        {
                return this.parse( html,null );
        }

        public String parse(String html,String allows )
        {
                if( allows == null || allows.trim().length() == 0 )
                {
                        html = reg.buildHTMLScriptRegex().replaceAll(html,"");
                        html = reg.buildHTMLCssRegex().replaceAll(html,"");
                        html = reg.buildHTMLTagRegex().replaceAll(html,"");       
                        System.out.println("====== \n"+html);
                        return html;
                }
                String tagre = "<([^>]*)>";       
                List<String> gs = reg.buildRegex(tagre).matcher(allows);
                String pr = "";               
                for(String g:gs)
                {
                        pr = "(<"+g+"[^>]*>(?:\\s|\\S)*?</[^>]+>)";
                        html = reg.buildRegex(pr).replaceAll(html,"<","####&lt####");                       
                }               
                html = reg.buildHTMLTagRegex().replaceAll(html,"");
                html = html.replaceAll("####&lt####","<");
               
                return html;
        }       

        class StripTagsRegExp
        {
                private final String htmltag = "<[^>]*>";
                private final String htmlscript = "<script[^>]*>(?:\\s|\\S)*?</script>";
                private final String htmlcss = "<style[^>]*>(?:\\s|\\S)*?</style>";

                private Pattern p;
                private Matcher m;

                public StripTagsRegExp buildHTMLTagRegex()
                {
                        this.p = Pattern.compile(htmltag,Pattern.CASE_INSENSITIVE);

                        return this;
                }

                public StripTagsRegExp buildHTMLScriptRegex()
                {
                        this.p = Pattern.compile(htmlscript,Pattern.CASE_INSENSITIVE);
                        return this;
                }

                public StripTagsRegExp buildHTMLCssRegex()
                {
                        this.p = Pattern.compile(htmlcss,Pattern.CASE_INSENSITIVE);
                        return this;
                }

                public StripTagsRegExp buildRegex(String reg)
                {
                        this.p = Pattern.compile(reg,Pattern.CASE_INSENSITIVE);
                        return this;
                }

                public StripTagsRegExp buildRegex(Pattern p)
                {
                        this.p = p;
                        return this;
                }

                public List<String> matcher(String str)
                {
                        List<String> gs = new ArrayList<String>();

                        m = p.matcher(str);
                        int count = 0;
                        int i=0;
                        while( m.find() )
                        {
                                count = m.groupCount();
                                for(i=1;i<=count;i++)
                                {
                                        gs.add(m.group(i));
                                }
                        }
                        m = null;

                        return gs;
                }

                public String replace(String str,String rstr)
                {
                        return str.replace(p.toString(),rstr);
                }

                public String replaceAll(String str,String rstr)
                {
                        return str.replaceAll(p.toString(),rstr);
                }

                public String replaceAll(String str,String i,String r )
                {
                        m = p.matcher(str);
                        String g = "";
                        while( m.find() )
                        {
                                g = m.group();                       
                                str = str.replaceAll(g,g.replaceAll(i,r));               
                        }
                        m = null;
                        return str;
                }

                public boolean test(String str)
                {
                        m = p.matcher(str);
                        return m.find();
                }
        }
}

评分

参与人数 1可用积分 +10 信誉积分 +2 收起 理由
starxing + 10 + 2 我很赞同

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2009-04-07 21:02 |只看该作者
原帖由 nathena 于 2009-4-7 15:48 发表
import java.util.regex.*;
import java.util.List;
import java.util.ArrayList;

/**
* @author nathena.yang
* 实现php中strip_tags的功能
* @version : 200947v.0.1(未测试)
*/
public class  ...

大侠真厉害!

非常谢谢!

论坛徽章:
0
5 [报告]
发表于 2009-04-08 09:24 |只看该作者
怎么不给钱啊

论坛徽章:
0
6 [报告]
发表于 2009-04-09 10:04 |只看该作者
原帖由 nathena 于 2009-4-8 09:24 发表
怎么不给钱啊

给分了。可以去换东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP