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

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

import java.util.regex.Matcher;
import java.util.regex.Pattern; 

/**
 * <p>
 * Title: HTML相关的正则表达式工具类
 * </p>
 * <p>
 * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记
 * </p>
 * <p>
 * Copyright: Copyright (c) 2006
 * </p>
 *
 * @author hejian
 * @version 1.0
 * @createtime 2006-10-16
 */ 

public class HtmlRegexpUtil {
 private final static String regxpForHtml = "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签 

 private final static String regxpForImgTag = "<\\s*img\\s+([^>]*)\\s*>"; // 找出IMG标签 

 private final static String regxpForImaTagSrcAttrib = "src=\"([^\"]+)\""; // 找出IMG标签的SRC属性 

 /**
  *
  */
 public HtmlRegexpUtil() {
  // TODO Auto-generated constructor stub
 } 

 /**
  *
  * 基本功能:替换标记以正常显示
  * <p>
  *
  * @param input
  * @return String
  */
 public String replaceTag(String input) {
  if (!hasSpecialChars(input)) {
   return input;
  }
  StringBuffer filtered = new StringBuffer(input.length());
  char c;
  for (int i = 0; i <= input.length() - 1; i++) {
   c = input.charAt(i);
   switch (c) {
   case '<':
    filtered.append("<");
    break;
   case '>':
    filtered.append(">");
    break;
   case '"':
    filtered.append(""");
    break;
   case '&':
    filtered.append("&");
    break;
   default:
    filtered.append(c);
   } 

  }
  return (filtered.toString());
 } 

 /**
  *
  * 基本功能:判断标记是否存在
  * <p>
  *
  * @param input
  * @return boolean
  */
 public boolean hasSpecialChars(String input) {
  boolean flag = false;
  if ((input != null) && (input.length() > 0)) {
   char c;
   for (int i = 0; i <= input.length() - 1; i++) {
    c = input.charAt(i);
    switch (c) {
    case '>':
     flag = true;
     break;
    case '<':
     flag = true;
     break;
    case '"':
     flag = true;
     break;
    case '&':
     flag = true;
     break;
    }
   }
  }
  return flag;
 } 

 /**
  *
  * 基本功能:过滤所有以"<"开头以">"结尾的标签
  * <p>
  *
  * @param str
  * @return String
  */
 public static String filterHtml(String str) {
  Pattern pattern = Pattern.compile(regxpForHtml);
  Matcher matcher = pattern.matcher(str);
  StringBuffer sb = new StringBuffer();
  boolean result1 = matcher.find();
  while (result1) {
   matcher.appendReplacement(sb, "");
   result1 = matcher.find();
  }
  matcher.appendTail(sb);
  return sb.toString();
 } 

 /**
  *
  * 基本功能:过滤指定标签
  * <p>
  *
  * @param str
  * @param tag
  *   指定标签
  * @return String
  */
 public static String fiterHtmlTag(String str, String tag) {
  String regxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>";
  Pattern pattern = Pattern.compile(regxp);
  Matcher matcher = pattern.matcher(str);
  StringBuffer sb = new StringBuffer();
  boolean result1 = matcher.find();
  while (result1) {
   matcher.appendReplacement(sb, "");
   result1 = matcher.find();
  }
  matcher.appendTail(sb);
  return sb.toString();
 } 

 /**
  *
  * 基本功能:替换指定的标签
  * <p>
  *
  * @param str
  * @param beforeTag
  *   要替换的标签
  * @param tagAttrib
  *   要替换的标签属性值
  * @param startTag
  *   新标签开始标记
  * @param endTag
  *   新标签结束标记
  * @return String
  * @如:替换img标签的src属性值为[img]属性值[/img]
  */
 public static String replaceHtmlTag(String str, String beforeTag,
   String tagAttrib, String startTag, String endTag) {
  String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\s*>";
  String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";
  Pattern patternForTag = Pattern.compile(regxpForTag);
  Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  Matcher matcherForTag = patternForTag.matcher(str);
  StringBuffer sb = new StringBuffer();
  boolean result = matcherForTag.find();
  while (result) {
   StringBuffer sbreplace = new StringBuffer();
   Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag
     .group(1));
   if (matcherForAttrib.find()) {
    matcherForAttrib.appendReplacement(sbreplace, startTag
      + matcherForAttrib.group(1) + endTag);
   }
   matcherForTag.appendReplacement(sb, sbreplace.toString());
   result = matcherForTag.find();
  }
  matcherForTag.appendTail(sb);
  return sb.toString();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java使用正则表达式(regex)匹配中文实例代码

    只能输入中文 /** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿 */ @Test public void a1() { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String regex = "^[\\u4e00-\\u9fa5]*$"; Matcher m = Pattern.compile(regex).matc

  • Java中正则表达式的使用和详解(上)

    1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式 Pattern pattern = Pa

  • Java使用正则表达式判断字符串是否以字符开始

    Java 正则表达式判断字符串是否以字符开始: public static boolean startWithChar(String s) { if (s != null && s.length() > 0) { String start = s.trim().substring(0, 1); Pattern pattern = Pattern.compile("^[A-Za-z]+$"); return pattern.matcher(start).matche

  • 整理很详细的Java正则表达式使用大全

    本文的全部内容都是针对Java正则表达式语法进行整理的,分享给大家: [正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$&quo

  • java使用正则表达式查找包含的字符串示例

    本文实例讲述了java使用正则表达式查找包含的字符串.分享给大家供大家参考,具体如下: Hello.java: package hello; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Hello { public static void main(String[] args) { String re = "\\[([^\\]]+)\\]"; String str = &quo

  • Java使用正则表达式对注册页面进行验证功能实现

    本文给大家介绍java使用正则表达式对注册页面进行验证的代码,代码如下所示: package regex; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class registered { public static void main(String[] args) { //注册用户 Scanner sc=new Scanner(System.in

  • Java使用正则表达式去除小数点后面多余的0功能示例

    本文实例讲述了Java使用正则表达式去除小数点后面多余的0功能.分享给大家供大家参考,具体如下: package test; /** * 去掉多余的.与0 * @author Hust * @Time 2011-11-7 */ public class TestString { public static void main(String[] args) { Float f = 1f; System.out.println(f.toString());//1.0 System.out.print

  • Java 正则表达式详细使用

    Java 正则表达式的使用,具体内容如下所示: java.util.regex.Pattern java.util.regex.Matcher 1.Match match 是从字符串最头部开始匹配,一直到结束,需要匹配整个串 String content = "Welcome, bob!"; content.match("bob"); //false content.match(".*bob") //false content.match(&qu

  • 在Java编程中使用正则表达式的基本方法

    众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段.  大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.   自从jdk1

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

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

  • C#使用正则表达式过滤html标签

    在项目中遇到这样一个需求,需要将一段html转换为一般文本返回,万能的正则表达式来了. 正则表达式来拯救你,代码如下: public static string Html2Text(string htmlStr) { if (String.IsNullOrEmpty(htmlStr)) { return ""; } string regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定

  • Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正文的前50字作为摘要,那么这时需要去除所有html标签,然后在截取50字,所以就通过了Java正则表达式实现了如下方法,代码如下: 注:这是Java正则表达式去除html标签方法. private static final String regEx_script = "<script[^>

  • PHP正则表达式过滤html标签属性(DEMO)

    过滤html标签在php中可以有内置的函数了,但它过滤的太干净了,我们就整理了一下些利用正则来过滤指定html标签的例子,具体如下所示. 采集的时候有时候需要过滤掉多余的标签属性,比如 img标签过滤掉除了src属性之外的所有属性例如删除titile alt等属性以及一些脚的onclick属性等. 例如 过滤除了src之外的所有属性: 复制代码 代码如下: $str= preg_replace('/\s(?!src)[a-zA-Z]+=[\'\"]{1}[^\'\"]+[\'\&quo

  • Java使用正则表达式删除所有HTML标签的方法示例

    本文实例讲述了Java使用正则表达式删除所有HTML标签的方法.分享给大家供大家参考,具体如下: package com.xz.cxzy.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HtmlUtil { private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/sc

  • java过滤html标签获取纯文本信息的实例

    如下所示: package com.lyt.base.util; import java.util.regex.Pattern; public class FilterHtmlUtil { public static String Html2Text(String inputString){ String htmlStr = inputString; //含html标签的字符串 String textStr =""; java.util.regex.Pattern p_script;

  • PHP中过滤常用标签的正则表达式

    我们常常会用到PHP过滤一些标签的功能,比如过滤链接标签.过滤script标签等等,下面就介绍一下PHP过滤常用标签的正则表达式代码: $str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格) $str=preg_replace

  • Java正则表达式过滤出字母、数字和中文

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2) 过滤出 数字 的正则表达式 [^(0-9)] (3) 过滤出 中文 的正则表达式 [^(\\u4e00-\\u9fa5)] (4) 过滤出字母.数字和中文的正则表达式 [^(a-zA-Z0-9\\u4e00-\\u9fa5)] 2.实例源码 ** * @Title:FilterStr.java * @Package:com.you.dao * @Description:Java中过滤数

  • Java基于正则表达式获取指定HTML标签指定属性值的方法

    本文实例讲述了Java基于正则表达式获取指定HTML标签指定属性值的方法.分享给大家供大家参考,具体如下: 有时可能会有这样的需求,从HTML页面获取指定标签的指定属性值,可以通过第三方库解析来获取,但是这样相对比较麻烦! 如果使用正则表达式,那么就变得简单了.代码如下: package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import

  • Python使用正则表达式过滤或替换HTML标签的方法详解

    本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法.分享给大家供大家参考,具体如下: python正则表达式关键内容: python正则表达式转义符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^

随机推荐