crawler_工具类_RegexUtils_正则帮助类
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(">", ">");
result = result.replaceAll("\r\n", "");
result = result.replaceAll("\\r\\n", "");
result = result.replaceAll("\\s", "");
result = result.replaceAll(" ", " ");
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、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...
- java Pattern(正则)类
Pattern的静态方法matches 用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串. Boolean b=Pattern.matches("^((13[0-9])|(15 ...
- Java工具类——日期相关的类
前言 在日常的开发工作当中,我们经常需要用到日期相关的类(包括日期类已经处理日期的类),所以,我就专门整理了一篇关于日期相关的类,希望可以帮助到大家. 正文 一.日期类介绍 在 Java 里面,操作日 ...
- Java工具类——数学相关的类
Java工具类--数学相关的类 在上一篇文章中,我们系统学习了 Java 里面的包装类,那么这篇文章,我们就来学习一下Java提供好的类--数学相关的类. 一.数学类介绍 在最早期学习 Java 基础 ...
- java自学第4期——:Scanner类、匿名对象介绍、Random类、ArrayList集合、标准类格式、String类、static静态、Arrays工具类、Math类(1)
一.Scanner类 1.api简介: 应用程序编程接口 2.Scanner类: 作用:获取键盘输入的数据 位置: java.util.Scanner. 使用:使用成员方法nextInt() 和 ne ...
- 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...
- C#工具:反射帮助类 泛型反射帮助类
反射帮助类 using System; using System.Reflection; using System.Data; using System.Drawing; using System.R ...
- python关于类和正则表达( 编写一个程序(类))
1.什么是类对象,实例对象 类对象:类名实例对象:类创建的对象 2.类属性: 就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本.对于公有的类属性,在类外可以通过类对象和实 ...
随机推荐
- 冒泡排序----java实现
冒泡排序思路:第1次:顺序比较从第0个到第len个(相邻两个)元素并把大的放后面,第一次进行完后,最大 的元素会在最后: ...
- 生命游戏(两),有一种东西叫CCScrollView
订婚app要么game'肯定不会陌生:CCScrollView并且CCTableView. 假如我不知道是什么CCScrollView,再看看testcpp要么testlua样品棒. 先说说CCScr ...
- 在投票系统方法的原则刷票(突破ip限制刷票PHP版)
让我谈一点:事实上,没有一个突破ip限制,因为实际上,,这项限制server结束,client牛逼,不能突破..只要是能够始终重复刷票罢了 一个朋友突然来了个网站,让我帮她投票..我是一个更好的人说话 ...
- vmWare虚拟机下ubuntu配置代理上网
最终用上了linux,windows下用vmWare安装虚拟机,挂ubuntu 14.04,,认为非常不习惯,非常难侍候. 而且遇到的客观困难还不少,这两天着实费了不少功夫.主要是上班这里上网要配置代 ...
- Raw-OS互斥的源代码分析的量的Mutex
作为分析的内核版本2014-04-15,基于1.05正式版.blogs我们会跟上的内核开发进度的最新版本,如果出现源代码的目光"???"的话,没有深究的部分是理解. Raw-OS官 ...
- CreateEvent、SetEvent、ResetEvent和WaitForSingleObject
事件对象就像一个开关:它仅仅有两种状态---开和关.当一个事件处于"开"状态.我们称其为"有信号".否则称为"无信号". 能够在一个线程的运 ...
- 《Lua游戏开发实践指南》读后感
书籍地址:http://book.douban.com/subject/20392269/ 一句话点评该书:想用Lua作游戏脚本开发的同学值得一读! (一)本书特点 市面专门讲Lua的中文书籍非常少, ...
- BC 2015在百度之星程序设计大赛 - 预赛(1)(矩形区域-旋转卡)
矩形区域 Accepts: 717 Submissions: 1619 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- Android 应用程序启动过程源代码分析
本文转自:http://blog.csdn.net/luoshengyang/article/details/6689748 前文简要介绍了Android应用程序的Activity的启动过程.在And ...
- 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]
采用当今项目hql询问.出现 QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ...