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. Codechef Course Selection

    Home » Practice(Hard) » Course Selection Course Selection Problem Code: RINSubmit https://www.codech ...

  2. Codeforces 807 B T-Shirt Hunt

    B. T-Shirt Hunt http://codeforces.com/problemset/problem/807/B time limit per test 2 seconds memory ...

  3. 【LibreOJ】#6257. 「CodePlus 2017 12 月赛」可做题2

    [题意]数列满足an=an-1+an-2,n>=3.现在a1=i,a2=[l,r],要求满足ak%p=m的整数a2有多少个.10^18. [算法]数论(扩欧)+矩阵快速幂 [题解]定义fib(i ...

  4. 【leetcode 简单】 第三十五题 环形链表

    给定一个链表,判断链表中是否有环. 进阶: 你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * struct ListNode { * ...

  5. NYOJ 133 子序列 (离散化)

    题目链接 描述 给定一个序列,请你求出该序列的一个连续的子序列,使原串中出现的所有元素皆在该子序列中出现过至少1次. 如2 8 8 8 1 1,所求子串就是2 8 8 8 1. 输入 第一行输入一个整 ...

  6. sublime格式化css代码插件:css format

    有时会从网上下载一些css压缩文件,打开后所有代码都在一行,不利于阅读,通过css format插件,能快速展开代码,方便阅读. 参考:Sublime Text 上最好用的 CSS 格式化插件 —— ...

  7. css_input[checked]复选框去掉默认样式并添加新样式

    效果对比: “\2713”实体符号√ :如有兴趣查看详细实体符号请点这里 代码实现: <!DOCTYPE html> <html> <head> <meta ...

  8. 网络抓包wireshark(转)

    下载地址:https://www.wireshark.org/download/win64/   抓包应该是每个技术人员掌握的基础知识,无论是技术支持运维人员或者是研发,多少都会遇到要抓包的情况,用过 ...

  9. pycharm显示行号

    在PyCharm 里,显示行号有两种办法: 1,临时设置.右键单击行号处,选择 Show Line Numbers. 但是这种方法,只对一个文件有效,并且,重启PyCharm 后消失. 2,永久设置. ...

  10. tomcat和weblogic的区别

    Tomcat是Apache基金会提供的Servlet容器,它支持JSP, Servlet和JDBC等J2EE关键技术,所以用户可以用Tomcat开发基于数据库,Servlet和JSP页面的Web应用, ...