package com.cph.crawler.core.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
*
* @ClassName: RegexUtils
* @Description: 正则帮助类
* @author cphmvp
* @date 2013-9-9 下午3:48:59<br>
* 适合单次抽取结果,不适合遍历抽取
*
*/
public final class RegexUtils {
private RegexUtils() { } private static Log logger = LogFactory.getLog(RegexUtils.class);
private static Pattern defaultPattern;
private static Matcher defaultMatcher;
private static final String NOT_MATCHER_DATA = "没有匹配到对应数据"; /**
* 返回单行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static String getString(String input, Pattern pattren, int group) {
if (pattren.toString().equals(
"<span class=\"l\">当前位置:([\\s\\S]*?)</span>")) {
System.out.println("warn");
}
String result = "";
String splitStr = "⊙";
defaultMatcher = pattren.matcher(input);
while (defaultMatcher.find()) {
result = defaultMatcher.group(group).trim() + "" + splitStr;
}
result = result.trim().replaceAll("</?[^>]+>", "");
result = result.replaceAll("&gt;", ">");
result = result.replaceAll("\r\n", "");
result = result.replaceAll("\\r\\n", "");
result = result.replaceAll("\\s", "");
result = result.replaceAll("&nbsp", " ");
result = result.replace("\n", "");
result = result.replace("\t", "");
result = result.replace("^p", "");
result = result.replaceAll("⊙", " ");
return result.trim();
} /**
* 返回单行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static String getString(String input, String regex, int group) {
String result = " ";
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
result = defaultMatcher.group(group).trim();
}
getLog(result);
return result;
} /**
* 获得可匹配对象
*
* @param input
* @param regex
* @return
*/
public static Matcher getMatcher(String input, String regex) {
defaultPattern = getPattern(regex);
defaultMatcher = defaultPattern.matcher(input);
return defaultMatcher;
} /**
* 获得模式对象
*
* @param regex
* @return
*/
public static Pattern getPattern(String regex) {
defaultPattern = Pattern.compile(regex);
return defaultPattern;
} /**
* 返回多行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static List<String> getStringList(String input, String regex,
int group) {
List<String> resultList = new ArrayList<String>();
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
resultList.add(defaultMatcher.group().trim());
}
if (resultList.size() < 1) {
logger.error(NOT_MATCHER_DATA);
}
return resultList;
} /**
* 返回多行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static List<Integer> getIntList(String input, String regex, int group) {
List<Integer> resultList = new ArrayList<Integer>();
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
resultList.add(Integer.parseInt(defaultMatcher.group().trim()));
}
if (resultList.size() < 1) {
logger.error(NOT_MATCHER_DATA);
}
return resultList;
} /**
* 返回多行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static String getString(String input, String regex) {
String result = " ";
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
result = defaultMatcher.group().trim();
}
getLog(result);
return result;
} /**
* 返回单行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static int getInt(String input, String regex, int group) {
int result = -1;
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
result = Integer.parseInt(defaultMatcher.group(group).trim());
}
getLog(result);
return result;
} /**
* 返回单行结果集
*
* @param input
* @param regex
* @param group
* @return
*/
public static int getInt(String input, String regex) {
int result = -1;
defaultMatcher = getMatcher(input, regex);
while (defaultMatcher.find()) {
result = Integer.parseInt(defaultMatcher.group().trim());
}
getLog(result);
return result;
} /**
* 匹配中国邮政编码
*
* @param postcode
* 邮政编码
* @return 验证成功返回true,验证失败返回false
*/
public static boolean checkPostcode(String postcode) {
String regex = "[1-9]\\d{5}";
return Pattern.matches(regex, postcode);
} private static void getLog(String result) {
if (result.trim().equals("")) {
logger.error(NOT_MATCHER_DATA);
}
} private static void getLog(Integer result) { if (-1 == result) {
logger.error(NOT_MATCHER_DATA);
}
}
}

crawler_工具类_RegexUtils_正则帮助类的更多相关文章

  1. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  2. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  3. java Pattern(正则)类

    Pattern的静态方法matches 用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串. Boolean b=Pattern.matches("^((13[0-9])|(15 ...

  4. Java工具类——日期相关的类

    前言 在日常的开发工作当中,我们经常需要用到日期相关的类(包括日期类已经处理日期的类),所以,我就专门整理了一篇关于日期相关的类,希望可以帮助到大家. 正文 一.日期类介绍 在 Java 里面,操作日 ...

  5. Java工具类——数学相关的类

    Java工具类--数学相关的类 在上一篇文章中,我们系统学习了 Java 里面的包装类,那么这篇文章,我们就来学习一下Java提供好的类--数学相关的类. 一.数学类介绍 在最早期学习 Java 基础 ...

  6. java自学第4期——:Scanner类、匿名对象介绍、Random类、ArrayList集合、标准类格式、String类、static静态、Arrays工具类、Math类(1)

    一.Scanner类 1.api简介: 应用程序编程接口 2.Scanner类: 作用:获取键盘输入的数据 位置: java.util.Scanner. 使用:使用成员方法nextInt() 和 ne ...

  7. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  8. C#工具:反射帮助类 泛型反射帮助类

    反射帮助类 using System; using System.Reflection; using System.Data; using System.Drawing; using System.R ...

  9. python关于类和正则表达( 编写一个程序(类))

    1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实 ...

随机推荐

  1. 【iOS】文件上传小记

    iOS由该系统提供API可以实现可以实现文件的上传和下载,有两种方法来. NSURLConnection与NSURLSession. 当中NSURLConnection是使用非常久的的一种方式.NSU ...

  2. UVALive 5103 Computer Virus on Planet Pandora Description 一些新兴需求模式的字符串 AC自己主动机

    主题链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=3104">点击打开链接 题意: ...

  3. grep在一个特定的文件搜索文件夹keyword

    grep -R --include="*.*"(文件名匹配)  key(keyword) dir(夹) eg.在当前文件夹搜索xml关键文件172.19.32.22 grep -R ...

  4. javascript动画中的“帧”

    在写游戏的时候,动画移动的速度需要保持一致,为了在各个软硬件环境中速度的一致,需要考虑帧频的不同. 计算时间系数: 时间系数 = 目标FPS / 实际FPS 计算实际FPS actualFPS = 1 ...

  5. opengl微发展理解

    1.什么是OpenGL? 一种程序,可以与界面和图形硬件交互作用.一个开放的标准 2.软件管道 请看上图 - Apllication层     表示你的程序(调用渲染命令.如opengl API) - ...

  6. Windows无法启动OracleOraDb10g_home1TNSListener维修,1错误067

    Oracle服务无法启动,据报:Windows无法启动OracleOraDb10g_home1TNSListener维修,错误 1067:这个过程意外终止. 在网上找了好久也没弄好.说什么环境变量的又 ...

  7. Install Orace 11g on Solaris 10 Sparc 64 bit

    昨天有一个客户端安装11g数据库.整个安装过程和一些遇到的问题是一个创纪录.共享. 由于客户不能使用自己的机器远程连接到server,意通过U盘.移动硬盘等拷贝不论什么文件.因此一些记录内容无法做到非 ...

  8. hdu 4912 Paths on the tree(树链拆分+贪婪)

    题目链接:hdu 4912 Paths on the tree 题目大意:给定一棵树,和若干个通道.要求尽量选出多的通道,而且两两通道不想交. 解题思路:用树链剖分求LCA,然后依据通道两端节点的LC ...

  9. .NET单元测试艺术(2) - 第一个单元测试

    List 2.1 使用[SetUp]和[TearDown]特性 using System; using System.Collections.Generic; using System.Linq; u ...

  10. android CheckBox RadioButton 照片和文字的间距问题

    利用自身的定义CheckBox 要么RadioButton时间.定义自己的图标和文字在不同的手机显示不同的音高.有时不太好控制,下面是我自己的定义CheckBox: 在Layout在下面xml: &l ...