`
itace
  • 浏览: 181549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

正则表达式匹配类

阅读更多
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



public class RegExpUtil {

	/**
	 * 过滤html标签
	 * @param s - html字符串
	 * @param tag - a,p,img,div,(不区分大小写)
	 * @param contain - 是否过滤掉标签内包含的内容
	 * @return
	 */
	public static String filterTag(String s, String tag, boolean contain) {
		String regexp = null;
		if (contain) {
			//懒惰匹配的加问号,如*?,最小匹配
			regexp = "<[\\s]*?"+tag+"[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?"+tag+"[\\s]*?>";
		} else {
			regexp = "<\\s*" + tag + "([^>]*)>|</\\s*" + tag + "\\s*>";
		}
		Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			matcher.appendReplacement(sb, "");
			//System.out.println(matcher.group());
		}
		matcher.appendTail(sb);
		return sb.toString();
	}

	/**
	 * 
	 * 过滤html标签组
	 * @param s - html字符串
	 * @param tags - a,p,img,div,(不区分大小写)
	 * @param contain - 是否过滤掉标签内包含的内容
	 * @return
	 */
	public static String filterTags(String s, String[] tags, boolean contain) {
		String ss = s;
		for (String tag : tags) {
			ss = filterTag(ss, tag, contain);
		}
		return ss;
	}
	/**
	 * 过滤html中的注释和标签
	 * @Date: 2013-6-24下午12:10:29
	 * @Description: String
	 * @param html
	 * @return
	 */
	public static String filterHtmlTag(String html){
		String regexp = "<[\\s*\\S*]([^>]*)>|</[\\s*\\S*]>";
		Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(html);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			matcher.appendReplacement(sb, "");
		}
		matcher.appendTail(sb);
		return sb.toString();
		
	}
	/**
	 * 先过滤掉head,script,style(包括标签内的内容),然后过滤所有的html标签(不包括内容)
	 * @Date: 2013-6-24下午12:13:07
	 * @Description: String
	 * @param text
	 * @return
	 */
	public static String filterNoise(String text){
		String[]tags = {"head","script","style"};
		text = filterTags(text, tags, true);
		text = filterHtmlTag(text);
		text = text.replaceAll("\\s+", "");
		return text;
	}
	/**
	 * 过滤掉指定的html标签
	 * @Date: 2013-6-13上午10:21:01
	 * @Description: void
	 * @param text
	 */
	public static String removeHTML(String text){
		
		String[] tags = { "a", "img", "p", "div", "center"};
		text = filterTags(text, tags, false);
		String[] tags2 = {"object","param","script","iframe" };
		text = filterTags(text, tags2, true);
		text = text.replaceAll("\\r*\\n*", "");
		text = text.replaceAll(">\\s*<", "><");
		return text;
	}

	public static boolean match(String text, String regex) {
		if ((text != null) && (text.trim().length() > 0)) {
			String t = text.replaceAll(regex, "");
			if (t.length() == 0) {
				return true;
			}
			return false;
		}

		return false;
	}

	public static boolean isChinese(String text) {
		String regex = "([\u4E00-\u9FA5])";
		return match(text, regex);
	}

	public static boolean isEnglish(String text) {
		String regex = "([a-zA-Z])";
		return match(text, regex);
	}

	public static boolean isDigit(String text) {
		String regex = "([0-9])";
		return match(text, regex);
	}

	public static String getChinese(String s) {
		String regexp = "([\u4E00-\u9FA5])";
		Pattern pattern = Pattern.compile(regexp, 2);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			sb.append(matcher.group());
		}
		return sb.toString();
	}
	public static String getEnglish(String s) {
		String regexp = "[a-zA-Z]";
		Pattern pattern = Pattern.compile(regexp, 2);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			sb.append(matcher.group());
		}
		return sb.toString();
	}
	public static String getEnglishPDF(String s) {
		String regexp = "[a-zA-Z\\s-&]";
		Pattern pattern = Pattern.compile(regexp, 2);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			sb.append(matcher.group());
		}
		return sb.toString();
	}
	public static String getDigit(String s) {
		String regexp = "[0-9]";
		Pattern pattern = Pattern.compile(regexp, 2);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			sb.append(matcher.group());
		}
		return sb.toString();
	}
	//过滤非字母数字汉字
	public static String filterNotAlphaDigitChinese(String text) {
		return text.replaceAll("[\\pP\\pZ\\pS]", "");
	}

	public static String filterPrefix(String text, String regex) {
		if ((text == null) || (text.trim().length() == 0)) {
			return null;
		}
		char[] cs = text.toCharArray();

		int index = 0;
		for (int i = 0; i < cs.length; i++) {
			String c = cs[i] + "";
			boolean bool = c.matches(regex);
			if (!bool) {
				index = i;
				break;
			}
		}
		String text_final = text.substring(index, text.length());
		return text_final;
	  }
	public static String add(String text,String regex,String prefix,String suffix){
//		String regex = "[\u4E00-\u9FA5]{2,20}[\\s]{1,10}[a-zA-Z\\s&]{1,50}";
//		"</content>\n<title>", "</title>\n<content>"
		//pattern 
		Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(text);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			String match_text = matcher.group();
//			match_text = match_text.replaceAll("\r", "");
			String replace_text = prefix+match_text+suffix; 
//			replace_text = replace_text.replaceAll("\n\r", "");
			matcher.appendReplacement(sb, replace_text);
//			sb.append(matcher.group());
		}
		matcher.appendTail(sb);
//		System.out.println(sb.toString());
		return sb.toString();
		
	}
	/**
	 * 是否是数字和符号的组合
	 * @param text
	 * @return
	 */
	public static boolean isDigitSymbol(String text){
		String regex = "[\\pP\\pS\\pN\\pZ]";
//		System.out.println(text.matches(regex));
		String t = text.replaceAll(regex, "");
		if("".equals(t)){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 是否包含中文或者英文
	 * @param text
	 * @return
	 */
	public static boolean isChineseEnglish(String text){
		String regex = "\\pL";
		Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(text);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
//			matcher.appendReplacement(sb, "");
//			System.out.println(matcher.group());
			return true;
		}
		return false;
	}
	public static List<String> getTagHtml(String s, String tag) {
		
			//懒惰匹配的加问号,如*?,最小匹配
		String regexp = "<[\\s]*?"+tag+"[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?"+tag+"[\\s]*?>";
//			regexp = "<\\s*" + tag + "([^>]*)>|</\\s*" + tag + "\\s*>";
		Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(s);
		List<String> result = new ArrayList<String>();
		while (matcher.find()) {
			String e = matcher.group();
//			System.out.println(matcher.toString());
			result.add(e);
			//System.out.println(matcher.group());
		}
		return result;
	}
	/**
	 * 过滤所有空格
	 * @param text
	 * @return
	 */
	public static String filterSpace(String text){
		String regex_32 = (char)32+"";
		text = text.replaceAll(regex_32, "");
		for (int i = 128; i < 161; i++) {
			String regex = (char)i+"";
			text = text.replaceAll(regex, "");
		}
		return text;
	}
	/**
	 * 过滤注释标签<!开头的
	 * @param s
	 * @param tag
	 * @param contain
	 * @return
	 */
	public static String filterAnnotation(String s) {
		//懒惰匹配的加问号,如*?,最小匹配
		String regexp = "<![^>]*>";

		Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(s);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			matcher.appendReplacement(sb, "");
			//System.out.println(matcher.group());
		}
		matcher.appendTail(sb);
		return sb.toString();
	}
	public static void main(String[] args) {
		
	}
}

 

分享到:
评论

相关推荐

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    易语言正则表达式类匹配中文

    在易语言中,正则表达式类是一个非常重要的工具,用于处理字符串的模式匹配和查找。在处理中文文本时,这个功能尤为关键,因为中文字符的编码和处理方式与英文有所不同。 正则表达式是用于匹配字符串模式的一种强大...

    易语言正则表达式匹配中文

    本文将深入探讨易语言中的正则表达式匹配中文的原理、方法以及应用。 正则表达式(Regular Expression)是一种模式匹配的语言,用于描述一种字符串的集合。在易语言中,我们可以通过内置的字符串函数来实现正则...

    正则表达式匹配调试工具

    为了更好地理解和调试正则表达式,开发者通常会使用专门的正则表达式匹配调试工具。 正则表达式匹配调试工具的功能通常包括以下几点: 1. **实时匹配测试**:用户可以输入正则表达式和待匹配的文本,工具会即时...

    正则表达式匹配算法

    这些基础语法是构建正则表达式匹配算法的基础。 接下来,我们可以采用DFA(确定有限状态自动机)或NFA(非确定有限状态自动机)来实现正则表达式的匹配。在这个案例中,C++代码可能是基于NFA实现的,因为NFA通常更...

    JavaScript正则表达式匹配 div style标签

    在进行正则表达式匹配时,需要构建能够正确描述目标模式的正则表达式。对于`&lt;div&gt;`和`&lt;style&gt;`标签,通常需要考虑的是标签的开始`&lt;div&gt;`、结束`&lt;/div&gt;`,以及它们之间的内容。对于`&lt;style&gt;`标签,需要识别它的开始`...

    正则表达式匹配小工具源码

    本项目提供了一个正则表达式匹配的小工具源码,旨在帮助开发者和学习者快速验证正则表达式的正确性。 该工具的核心功能是验证正则表达式,确保其能正确匹配目标字符串。在开发过程中,正则表达式的调试往往是一项...

    易语言正则表达式取网址和名称

    局部变量 匹配结果, 结构体(正则表达式匹配) .局部变量 目标文本, 文本型 = "这里是包含网址的文本,比如 http://example.com 和 www.example.org" .局部变量 网址, 文本型 .程序段 .创建对象 正则表达式对象, ...

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    Java使用正则表达式提取XML节点内容的方法示例

    Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧。 一、正则表达式简介 正则表达式是指一...

    基于FPGA的正则表达式匹配引擎设计.pdf

    基于FPGA的正则表达式匹配引擎设计涉及硬件加速技术,它能显著提升正则表达式匹配过程的性能。在深入探讨FPGA设计之前,我们首先需要理解正则表达式匹配引擎的作用以及为什么需要在硬件层面实现加速。 正则表达式...

    VC、VC++,MFC 正则表达式类库

    1. `CRegEx`:这是MFC中的核心正则表达式类,用于表示一个正则表达式模式。它提供了构造、编译、匹配、替换等功能。例如,你可以创建一个`CRegEx`对象,用字符串初始化表达式,然后调用`Compile`方法来验证该表达式...

    正则表达式工具类,正则表达式封装,Java正则表达式

    首先,`RegUtils`类通常会包含一系列静态方法,这些方法接受正则表达式和待处理字符串作为参数,返回匹配结果或处理后的字符串。例如,可能有以下方法: 1. `isMatch(String regex, String input)`: 这个方法用于...

    vb正则表达式实例(正则表达式测试程序)

    在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...

    正则表达式转换工具

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...

    正则表达式测试工具C#版(src)

    - `Match`类:表示正则表达式的一个匹配结果。 - `MatchCollection`类:存储多个匹配结果的集合。 2. **正则表达式语法** - 基本元字符:如`.`(匹配任意字符,除换行符)、`^`(匹配行首)、`$`(匹配行尾)、`...

    C++ 正则表达式匹配工具源码

    在"C++ 正则表达式匹配工具源码"中,我们可以期待看到一系列类和函数,它们是基于`&lt;regex&gt;`库实现的,用于解析、编译和执行正则表达式。这些工具可能包括: 1. **正则表达式编译**:`std::regex`类用于创建一个正则...

    正则表达式在数据库查询中的应用

    1. **模糊查询**:通过正则表达式匹配相似的文本,如查询包含特定单词或短语的记录。 ```sql SELECT * FROM articles WHERE content REGEXP '.*example.*'; ``` 2. **格式验证**:确保输入的数据符合预期的格式,...

Global site tag (gtag.js) - Google Analytics