package com.test.core.util;

import org.apache.log4j.Logger;
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher; public final class RegexpUtils { private static Logger log = Logger.getLogger(RegexpUtils.class); private RegexpUtils() {
} /**
* 匹配图象
*
*
* 格式: /相对路径/文件名.后缀 (后缀为gif,dmp,png)
*
* 匹配 : /forum/head_icon/admini2005111_ff.gif 或 admini2005111.dmp
*
*
* 不匹配: c:/admins4512.gif
*
*/
public static final String ICON_REGEXP = "^(/{0,1}//w){1,}//.(gif|dmp|png|jpg)$|^//w{1,}//.(gif|dmp|png|jpg)$"; /**
* 匹配email地址
*
*
* 格式: XXX@XXX.XXX.XX
*
* 匹配 : foo@bar.com 或 foobar@foobar.com.au
*
* 不匹配: foo@bar 或 $$$@bar.com
*
*/
public static final String EMAIL_REGEXP = "(?://w[-._//w]*//w@//w[-._//w]*//w//.//w{2,3}$)"; /**
* 匹配匹配并提取url
*
*
* 格式: XXXX://XXX.XXX.XXX.XX/XXX.XXX?XXX=XXX
*
* 匹配 : http://www.suncer.com 或news://www
*
* 不匹配: c:/window
*
*/
public static final String URL_REGEXP = "(//w+)://([^/:]+)(://d*)?([^#//s]*)"; /**
* 匹配并提取http
*
* 格式: http://XXX.XXX.XXX.XX/XXX.XXX?XXX=XXX 或 ftp://XXX.XXX.XXX 或
* https://XXX
*
* 匹配 : http://www.suncer.com:8080/index.html?login=true
*
* 不匹配: news://www
*
*/
public static final String HTTP_REGEXP = "(http|https|ftp)://([^/:]+)(://d*)?([^#//s]*)"; /**
* 匹配日期
*
*
* 格式(首位不为0): XXXX-XX-XX或 XXXX-X-X
*
*
* 范围:1900--2099
*
*
* 匹配 : 2005-04-04
*
*
* 不匹配: 01-01-01
*
*/
public static final String DATE_BARS_REGEXP = "^((((19){1}|(20){1})\\d{2})|\\d{2})-[0,1]?\\d{1}-[0-3]?\\d{1}$"; /**
* 匹配日期
*
*
* 格式: XXXX/XX/XX
*
*
* 范围:
*
*
* 匹配 : 2005/04/04
*
*
* 不匹配: 01/01/01
*
*/
public static final String DATE_SLASH_REGEXP = "^[0-9]{4}/(((0[13578]|(10|12))/(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)/(0[1-9]|[1-2][0-9]|30)))$"; /**
* 匹配电话
*
*
* 格式为: 0XXX-XXXXXX(10-13位首位必须为0) 或0XXX XXXXXXX(10-13位首位必须为0) 或
*
* (0XXX)XXXXXXXX(11-14位首位必须为0) 或 XXXXXXXX(6-8位首位不为0) 或
* XXXXXXXXXXX(11位首位不为0)
*
*
* 匹配 : 0371-123456 或 (0371)1234567 或 (0371)12345678 或 010-123456 或
* 010-12345678 或 12345678912
*
*
* 不匹配: 1111-134355 或 0123456789
*
*/
public static final String PHONE_REGEXP = "^(?:0[0-9]{2,3}[-//s]{1}|//(0[0-9]{2,4}//))[0-9]{6,8}$|^[1-9]{1}[0-9]{5,7}$|^[1-9]{1}[0-9]{10}$"; /**
* 匹配身份证
*
* 格式为: XXXXXXXXXX(10位) 或 XXXXXXXXXXXXX(13位) 或 XXXXXXXXXXXXXXX(15位) 或
* XXXXXXXXXXXXXXXXXX(18位)
*
* 匹配 : 0123456789123
*
* 不匹配: 0123456
*
*/
public static final String ID_CARD_REGEXP = "^//d{10}|//d{13}|//d{15}|//d{18}$"; /**
* 匹配邮编代码
*
* 格式为: XXXXXX(6位)
*
* 匹配 : 012345
*
* 不匹配: 0123456
*
*/
public static final String ZIP_REGEXP = "^[0-9]{6}$";// 匹配邮编代码 /**
* 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号< 反斜杠/
* 即空格,制表符,回车符等 )
*
* 格式为: x 或 一个一上的字符
*
* 匹配 : 012345
*
* 不匹配: 0123456 // ;,:-<>//s].+$";//
*/
public static final String NON_SPECIAL_CHAR_REGEXP = "^[^'/";
// 匹配邮编代码 /**
* 匹配非负整数(正整数 + 0)
*/
public static final String NON_NEGATIVE_INTEGERS_REGEXP = "^//d+$"; /**
* 匹配不包括零的非负整数(正整数 > 0)
*/
public static final String NON_ZERO_NEGATIVE_INTEGERS_REGEXP = "^[1-9]+//d*$"; /**
*
* 匹配正整数
*
*/
public static final String POSITIVE_INTEGER_REGEXP = "^[0-9]*[1-9][0-9]*$"; /**
*
* 匹配非正整数(负整数 + 0)
*
*/
public static final String NON_POSITIVE_INTEGERS_REGEXP = "^((-//d+)|(0+))$"; /**
*
* 匹配负整数
*
*/
public static final String NEGATIVE_INTEGERS_REGEXP = "^-[0-9]*[1-9][0-9]*$"; /**
*
* 匹配整数
*
*/
public static final String INTEGER_REGEXP = "^-?//d+$"; /**
*
* 匹配非负浮点数(正浮点数 + 0)
*
*/
public static final String NON_NEGATIVE_RATIONAL_NUMBERS_REGEXP = "^//d+(//.//d+)?$"; /**
*
* 匹配正浮点数
*
*/
public static final String POSITIVE_RATIONAL_NUMBERS_REGEXP = "^(([0-9]+//.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*//.[0-9]+)|([0-9]*[1-9][0-9]*))$"; /**
*
* 匹配非正浮点数(负浮点数 + 0)
*
*/
public static final String NON_POSITIVE_RATIONAL_NUMBERS_REGEXP = "^((-//d+(//.//d+)?)|(0+(//.0+)?))$"; /**
*
* 匹配负浮点数
*
*/
public static final String NEGATIVE_RATIONAL_NUMBERS_REGEXP = "^(-(([0-9]+//.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*//.[0-9]+)|([0-9]*[1-9][0-9]*)))$"; /**
*
* 匹配浮点数
*
*/
public static final String RATIONAL_NUMBERS_REGEXP = "^(-?//d+)(//.//d+)?$"; /**
*
* 匹配由26个英文字母组成的字符串
*
*/
public static final String LETTER_REGEXP = "^[A-Za-z]+$"; /**
*
* 匹配由26个英文字母的大写组成的字符串
*
*/
public static final String UPWARD_LETTER_REGEXP = "^[A-Z]+$"; /**
*
* 匹配由26个英文字母的小写组成的字符串
*
*/
public static final String LOWER_LETTER_REGEXP = "^[a-z]+$"; /**
*
* 匹配由数字和26个英文字母组成的字符串
*
*/
public static final String LETTER_NUMBER_REGEXP = "^[A-Za-z0-9]+$"; /**
*
* 匹配由数字、26个英文字母或者下划线组成的字符串
*
*/
public static final String LETTER_NUMBER_UNDERLINE_REGEXP = "^//w+$"; /**
* 大小写敏感的正规表达式批配
*
* @param source
* 批配的源字符串
* @param regexp
* 批配的正规表达式
* @return 如果源字符串符合要求返回真,否则返回假
*/
public static boolean isHardRegexpValidate(String source, String regexp) { try {
// 用于定义正规表达式对象模板类型
PatternCompiler compiler = new Perl5Compiler(); // 正规表达式比较批配对象
PatternMatcher matcher = new Perl5Matcher(); // 实例大小大小写敏感的正规表达式模板
Pattern hardPattern = compiler.compile(regexp); // 返回批配结果
return matcher.contains(source, hardPattern); } catch (MalformedPatternException e) {
log.warn(e);
} return false;
} }

Java常用工具类之RegexpUtils,正则表达式工具类的更多相关文章

  1. GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系

    统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...

  2. java 常用类库:格式化NumberFormat;SimpleDataFormat类(转换Data()对象);DateTimeFormatter 转换LocalDateTime时间对象

    NumberFormat类 该类是一个做数字格式化的类,它是一个抽象类,无法实例化.它提供了parse()和format()方法,其中format用于将数值,格式转化成字符串,parse()用于把字符 ...

  3. java 常用类库:String ; StringBuilder和StringBuffer类

    1. String 1.String对象是不可变的 String类的value属性是用来存放字符串里面的值的.这个属性是被final修饰的.final修饰的变量不能够被第二次赋值,所以字符串是不可变的 ...

  4. (转)介绍几个C#正则表达式工具

    推荐三个C#正则表达式工具,理由如下 第一个C#正则表达式工具,REGEX 这个C#正则表达式工具优点是中文的,提供了一些示例 第二个C#正则表达式工具,REGEXBUDDY 这是一个真正专业的REG ...

  5. 介绍几个C#正则表达式工具

    这里将为大家推荐介绍几个C#正则表达式工具,这些小工具能帮助大家在.NET开发过程中起到事半功倍的效果,希望大家喜欢. 推荐三个C#正则表达式工具,理由如下 第一个C#正则表达式工具,REGEX 这个 ...

  6. Java 常用API(一)

    目录 Java 常用API(一) 1. Scanner类 引用类型的一般使用步骤 Scanner的使用步骤 例题 2. 匿名对象 概述 匿名对象作为方法的参数 匿名对象作为方法的返回值 3. Rand ...

  7. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  8. JAVA自动生成正则表达式工具类

    经过很久的努力,终于完成了JAVA自动生成正则表达式工具类.还记得之前需要正则,老是从网上找吗?找了想修改也不会修改.现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式.赶快在同事面前炫一下吧. ...

  9. java常用正则校验工具类

    正则常用校验工具类 import java.util.regex.Pattern; /** * @program: * @description: 校验工具类 * @author: xujingyan ...

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

    正则表达式工具类 正则表达式封装 Java正则表达式 >>>>>>>>>>>>>>>>>>& ...

随机推荐

  1. Ibatis的resultMap和查询数据的对应关系

    iBatis和MyBatis 中返回数据对应关系 直接进入主题,现在的项目改用MyBatis了,感觉跟iBatis还是不一样的,比如在判断空值上面,iBatis是有标签的<isNotEmpty& ...

  2. Codeforces 221 B. Little Elephant and Numbers

    B. Little Elephant and Numbers time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  3. Linux高级编程--03.make和makfile

    Makefile语法基础 在Linux下,自动化编译工具是通过make命令来完成的(一些工具厂商也提供了它们自己的make命令,如gmake等),make命令的基本格式如下: make [-f mak ...

  4. CodeForces 990C

    Description A bracket sequence is a string containing only characters "(" and ")" ...

  5. HDU 1034 Candy Sharing Game (模拟)

    题目链接 Problem Description A number of students sit in a circle facing their teacher in the center. Ea ...

  6. c语言学习笔记.数组.

    数组: 可以存储一个固定大小的相同类型元素的顺序集合,比如int类型的数组.float类型的数组,里面存放的数据称为“元素”. 所有的数组都是由连续的内存位置组成.最低的地址对应第一个元素,最高的地址 ...

  7. CTF线下赛AWD套路小结

    近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一. AWD模式简介 AWD:Attack With Defence,比赛中每个队伍维护多台服务 ...

  8. 宋牧春: Linux设备树文件结构与解析深度分析(1) 【转】

    转自:https://mp.weixin.qq.com/s/OX-aXd5MYlE_YoZ3p32qWA 作者简介 宋牧春,linux内核爱好者,喜欢阅读各种开源代码(uboot.linux.ucos ...

  9. juery中循环遍历json数组

    var dataList=[]; var stock0={stockcode:"007758",stockname:"商业政7",state:"1&q ...

  10. NEERC2014

    NEERC2014 A - Alter Board 题目描述:给出一个\(n \times m\)的国际象棋棋盘,每次选定一个矩形,使得矩形中的每个格子的颜色翻转,求出最少次数的方案使得最终棋盘只有一 ...