`

java 正则表达式 过滤html标签

    博客分类:
  • java
阅读更多

前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了,那后台也是可以截取字符的啊,那是因为编辑器里面包含了html标签,所以后台就需要处理html标签的正则表达式,前些天上网搜了下,发现有人写好的一个类,给大家共享下,不要闲小弟落伍了...

Java代码 复制代码 收藏代码
  1. import java.util.regex.Matcher;   
  2. import java.util.regex.Pattern;   
  3.   
  4. /**  
  5.  * <p>  
  6.  * Title: HTML相关的正则表达式工具类  
  7.  * </p>  
  8.  * <p>  
  9.  * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记  
  10.  * </p>  
  11.  * <p>  
  12.  * Copyright: Copyright (c) 2006  
  13.  * </p>  
  14.  *   
  15.  * @author hejian  
  16.  * @version 1.0  
  17.  * @createtime 2006-10-16  
  18.  */  
  19.   
  20. public class HtmlRegexpUtil {   
  21.     private final static String regxpForHtml = "<([^>]*)>"// 过滤所有以<开头以>结尾的标签   
  22.   
  23.     private final static String regxpForImgTag = "<\\s*img\\s+([^>]*)\\s*>"// 找出IMG标签   
  24.   
  25.     private final static String regxpForImaTagSrcAttrib = "src=\"([^\"]+)\""// 找出IMG标签的SRC属性   
  26.   
  27.     /**  
  28.      *   
  29.      */  
  30.     public HtmlRegexpUtil() {   
  31.         // TODO Auto-generated constructor stub   
  32.     }   
  33.   
  34.     /**  
  35.      *   
  36.      * 基本功能:替换标记以正常显示  
  37.      * <p>  
  38.      *   
  39.      * @param input  
  40.      * @return String  
  41.      */  
  42.     public String replaceTag(String input) {   
  43.         if (!hasSpecialChars(input)) {   
  44.             return input;   
  45.         }   
  46.         StringBuffer filtered = new StringBuffer(input.length());   
  47.         char c;   
  48.         for (int i = 0; i <= input.length() - 1; i++) {   
  49.             c = input.charAt(i);   
  50.             switch (c) {   
  51.             case '<':   
  52.                 filtered.append("&lt;");   
  53.                 break;   
  54.             case '>':   
  55.                 filtered.append("&gt;");   
  56.                 break;   
  57.             case '"':   
  58.                 filtered.append("&quot;");   
  59.                 break;   
  60.             case '&':   
  61.                 filtered.append("&amp;");   
  62.                 break;   
  63.             default:   
  64.                 filtered.append(c);   
  65.             }   
  66.   
  67.         }   
  68.         return (filtered.toString());   
  69.     }   
  70.   
  71.     /**  
  72.      *   
  73.      * 基本功能:判断标记是否存在  
  74.      * <p>  
  75.      *   
  76.      * @param input  
  77.      * @return boolean  
  78.      */  
  79.     public boolean hasSpecialChars(String input) {   
  80.         boolean flag = false;   
  81.         if ((input != null) && (input.length() > 0)) {   
  82.             char c;   
  83.             for (int i = 0; i <= input.length() - 1; i++) {   
  84.                 c = input.charAt(i);   
  85.                 switch (c) {   
  86.                 case '>':   
  87.                     flag = true;   
  88.                     break;   
  89.                 case '<':   
  90.                     flag = true;   
  91.                     break;   
  92.                 case '"':   
  93.                     flag = true;   
  94.                     break;   
  95.                 case '&':   
  96.                     flag = true;   
  97.                     break;   
  98.                 }   
  99.             }   
  100.         }   
  101.         return flag;   
  102.     }   
  103.   
  104.     /**  
  105.      *   
  106.      * 基本功能:过滤所有以"<"开头以">"结尾的标签  
  107.      * <p>  
  108.      *   
  109.      * @param str  
  110.      * @return String  
  111.      */  
  112.     public static String filterHtml(String str) {   
  113.         Pattern pattern = Pattern.compile(regxpForHtml);   
  114.         Matcher matcher = pattern.matcher(str);   
  115.         StringBuffer sb = new StringBuffer();   
  116.         boolean result1 = matcher.find();   
  117.         while (result1) {   
  118.             matcher.appendReplacement(sb, "");   
  119.             result1 = matcher.find();   
  120.         }   
  121.         matcher.appendTail(sb);   
  122.         return sb.toString();   
  123.     }   
  124.   
  125.     /**  
  126.      *   
  127.      * 基本功能:过滤指定标签  
  128.      * <p>  
  129.      *   
  130.      * @param str  
  131.      * @param tag  
  132.      *            指定标签  
  133.      * @return String  
  134.      */  
  135.     public static String fiterHtmlTag(String str, String tag) {   
  136.         String regxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>";   
  137.         Pattern pattern = Pattern.compile(regxp);   
  138.         Matcher matcher = pattern.matcher(str);   
  139.         StringBuffer sb = new StringBuffer();   
  140.         boolean result1 = matcher.find();   
  141.         while (result1) {   
  142.             matcher.appendReplacement(sb, "");   
  143.             result1 = matcher.find();   
  144.         }   
  145.         matcher.appendTail(sb);   
  146.         return sb.toString();   
  147.     }   
  148.   
  149.     /**  
  150.      *   
  151.      * 基本功能:替换指定的标签  
  152.      * <p>  
  153.      *   
  154.      * @param str  
  155.      * @param beforeTag  
  156.      *            要替换的标签  
  157.      * @param tagAttrib  
  158.      *            要替换的标签属性值  
  159.      * @param startTag  
  160.      *            新标签开始标记  
  161.      * @param endTag  
  162.      *            新标签结束标记  
  163.      * @return String  
  164.      * @如:替换img标签的src属性值为[img]属性值[/img]  
  165.      */  
  166.     public static String replaceHtmlTag(String str, String beforeTag,   
  167.             String tagAttrib, String startTag, String endTag) {   
  168.         String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\s*>";   
  169.         String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";   
  170.         Pattern patternForTag = Pattern.compile(regxpForTag);   
  171.         Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);   
  172.         Matcher matcherForTag = patternForTag.matcher(str);   
  173.         StringBuffer sb = new StringBuffer();   
  174.         boolean result = matcherForTag.find();   
  175.         while (result) {   
  176.             StringBuffer sbreplace = new StringBuffer();   
  177.             Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag   
  178.                     .group(1));   
  179.             if (matcherForAttrib.find()) {   
  180.                 matcherForAttrib.appendReplacement(sbreplace, startTag   
  181.                         + matcherForAttrib.group(1) + endTag);   
  182.             }   
  183.             matcherForTag.appendReplacement(sb, sbreplace.toString());   
  184.             result = matcherForTag.find();   
  185.         }   
  186.         matcherForTag.appendTail(sb);   
  187.         return sb.toString();   
  188.     }   
  189. }  
分享到:
评论
2 楼 bugyun 2016-02-29  
受教了,谢谢
1 楼 xiongxingxing_123 2013-12-08  
学习了,感谢了

相关推荐

    java正则表达式过滤html标签

    java正则表达式过滤html标签

    Java正则表达式过滤html标签1[参考].pdf

    Java正则表达式过滤html标签1[参考].pdf

    java使用正则表达式过滤html标签

    本篇文章主要介绍了java正则表达式过滤html标签,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    移除HTML标签的正则表达式

    移除HTML标签的正则表达式,这里是asp版本,注意是看正则的写法,脚本之家以前也发布过类似的代码。

    java过滤html代码

    通过正则表达式过滤到html中的标签,将内容保存下来

    java代码-正则去除HTML代码中的IMG标签

    java代码-正则去除HTML代码中的IMG标签

    ue-chinese17.1内含注册机

    能够设置远程(服务器)或本地(基于Perl的正则表达式)过滤器(提供对SFTP的过滤能力) 先进的代理支持和SSL证书处理 (可选)为每个FTP帐户​​的本地默认目录 SSH / Telnet窗口 解析的XML树视图加上移动,删除,...

    Java面试宝典2020修订版V1.0.1.doc

    35、写出验证Email的正则表达式 22 39、说出十种常见的异常 22 40什么是检查性异常和非检查性异常? 23 41、Java的异常处理机制是什么? 23 42、一个静态方法,里面可不可以用this和super关键字 24 三、JavaScript/...

    Java语言基础下载

    正则表示式(Regular expression) 133 StringBuffer类 135 StringBuffer与String的区别 136 集合类的使用 136 实例分析 136 内容总结 153 独立实践 154 第十章:JAVA GUI概述 155 学习目标 155 GUI概述及组成 156 ...

    Java2核心技术.part5

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 ...

    Java开发技术大全 电子版

    13.7.3正则表达式中的一些高级规则421 13.7.4正则表达式中的其他通用规则424 13.7.5使用技巧425 13.8Pattern类的使用426 13.9Matcher类的使用428 13.9.1匹配方法的使用429 13.9.2替换方法的使用430 13.9.3组...

    Java2核心技术.part3

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 ...

    Java2核心技术.part1

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 13.5.3调用...

    Java2核心技术.part6

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 ...

    Java2核心技术.part4

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 ...

    Java2核心技术.part2

    12.8正则表达式 13章泛型程序设计 13.1为什么要使用泛型程序设计 13.2简单泛型类的定义 13.3泛型方法 13.4类型变量的限定 13.5泛型代码和虚拟机 13.5.1翻译泛型表达式 13.5.2翻译泛型方法 ...

    xheditor-1.1.14

    localUrlTest:非本站域名测试正则表达式 参数值:正则表达式 说明:本参数用来测试某些组件中测试URL是否属于本站域名 备注:v1.1.8新添加 remoteImgSaveUrl:远程图片抓取接收程序URL 参数值:字符串(若不设置不...

    IBM WebSphere Portal门户开发笔记01

    58、JS正则表达式去除空格类方法 335 59、JS重写CONFIRM把确定修改为是与否 335 60、JS执行EXE可执行文件 336 61、JS读取注册表且执行EXE文件 336 62、JS与VBSCRIPT的结合使用 337 63、IE与火狐获取标签的文本内容...

Global site tag (gtag.js) - Google Analytics