`
115893520
  • 浏览: 140423 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

一个java正规表达式工具类

阅读更多

以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。

如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 .

类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 apache网站下下载

在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧.

这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了):

 1.匹配图象;                      2 匹配email地址;                    3 匹配匹配并提取url ;                         4 匹配并提取http ;

 5.匹配日期                       6 匹配电话;                               7 匹配身份证                                       8 匹配邮编代码

9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号<  反斜杠\ 即空格,制表符,回车符等 

10 匹配非负整数(正整数 + 0)                                         11 匹配不包括零的非负整数(正整数 > 0)

12 匹配正整数                                                                      13  匹配非正整数(负整数 + 0)                                                

14 匹配负整数;                                                                      15. 匹配整数 ;

16 匹配非负浮点数(正浮点数 + 0)                                17. 匹配正浮点数

18 匹配非正浮点数(负浮点数 + 0)                                19 匹配负浮点数;                          

 20 .匹配浮点数;                                                                      21. 匹配由26个英文字母组成的字符串;   

22. 匹配由26个英文字母的大写组成的字符串                   23 匹配由26个英文字母的小写组成的字符串 

24 匹配由数字和26个英文字母组成的字符串;                   25  匹配由数字、26个英文字母或者下划线组成的字符串;

java 代码
  1.     
  2. package com.ygj.util;   
  3.   
  4. import java.util.*;   
  5.   
  6. import org.apache.oro.text.regex.*;   
  7.  
  8.   
  9. /**  
  10.  * 类简介: 使用正则表达式验证数据或提取数据,类中的方法全为静态的
     * 主要方法:1. isHardRegexpValidate(String source, String regexp)  
  11.               区分大小写敏感的正规表达式批配   
  12.  *          2. isSoftRegexpValidate(String source, String regexp)  
  13.  *             不区分大小写的正规表达式批配  
  14.  *          3. getHardRegexpMatchResult(String source, String regexp)  
  15.  *             返回许要的批配结果集(大小写敏感的正规表达式批配)  
  16.  *          4. getSoftRegexpMatchResult(String source, String regexp)  
  17.  *             返回许要的批配结果集(不区分大小写的正规表达式批配)  
  18.  *          5  getHardRegexpArray(String source, String regexp)  
  19.  *             返回许要的批配结果集(大小写敏感的正规表达式批配)  
  20.  *          6. getSoftRegexpMatchResult(String source, String regexp)  
  21.  *             返回许要的批配结果集(不区分大小写的正规表达式批配)  
  22.  *          7.  getBetweenSeparatorStr(final String originStr,final char leftSeparator,final char rightSeparator)  
  23.  *             得到指定分隔符中间的字符串的集合  
  24.  *  
  25.  * @mail wuzhi2000@hotmail.com  
  26.  * @author ygj  
  27.  *  
  28.  */  
  29. public final class Regexp   
  30. {   
  31.   
  32.     /**  保放有四组对应分隔符 */  
  33.     static final  Set SEPARATOR_SET=new TreeSet();   
  34.     {   
  35.                SEPARATOR_SET.add("(");   
  36.                SEPARATOR_SET.add(")");   
  37.                SEPARATOR_SET.add("[");   
  38.                SEPARATOR_SET.add("]");   
  39.                SEPARATOR_SET.add("{");   
  40.                SEPARATOR_SET.add("}");   
  41.                SEPARATOR_SET.add("<");   
  42.                SEPARATOR_SET.add(">");   
  43.     }   
  44.   
  45.   
  46.     /** 存放各种正规表达式(以key->value的形式) */  
  47.      public static HashMap regexpHash = new HashMap();   
  48.   
  49.     /** 存放各种正规表达式(以key->value的形式) */  
  50.     public static  List matchingResultList = new ArrayList();   
  51.   
  52.    private       Regexp()   
  53.     {   
  54.   
  55.     }   
  56.     /**  
  57.      * 返回 Regexp 实例  
  58.      * @return  
  59.      */  
  60.     public static Regexp getInstance()   
  61.     {   
  62.         return new Regexp();   
  63.     }   
  64.   
  65.     /**  
  66.      * 匹配图象 
     
  67.      *  
  68.      * 格式: /相对路径/文件名.后缀 (后缀为gif,dmp,png)  
  69.      *  
  70.      * 匹配 : /forum/head_icon/admini2005111_ff.gif 或 admini2005111.dmp
     
  71.      *  
  72.      * 不匹配: c:/admins4512.gif  
  73.      *  
  74.      */  
  75.     public static final String icon_regexp = "^(/{0,1}\\w){1,}\\.(gif|dmp|png|jpg)$|^\\w{1,}\\.(gif|dmp|png|jpg)$";   
  76.   
  77.     /**  
  78.      * 匹配email地址 
     
  79.      *  
  80.      * 格式: XXX@XXX.XXX.XX  
  81.      *  
  82.      * 匹配 : foo@bar.com 或 foobar@foobar.com.au 
     
  83.      *  
  84.      * 不匹配: foo@bar 或 $$$@bar.com  
  85.      *  
  86.      */  
  87.     public static final String email_regexp = "(?:\\w[-._\\w]*\\w@\\w[-._\\w]*\\w\\.\\w{2,3}$)";   
  88.   
  89.     /**  
  90.      * 匹配匹配并提取url 
     
  91.      *  
  92.      * 格式: XXXX://XXX.XXX.XXX.XX/XXX.XXX?XXX=XXX  
  93.      *  
  94.      * 匹配 : http://www.suncer.com 或news://www
     
  95.      *  
  96.      * 提取(MatchResult matchResult=matcher.getMatch()):  
  97.      *              matchResult.group(0)= http://www.suncer.com:8080/index.html?login=true  
  98.      *              matchResult.group(1) = http  
  99.      *              matchResult.group(2) = www.suncer.com  
  100.      *              matchResult.group(3) = :8080  
  101.      *              matchResult.group(4) = /index.html?login=true  
  102.      *  
  103.      * 不匹配: c:\window  
  104.      *  
  105.      */  
  106.     public static final String url_regexp = "(\\w+)://([^/:]+)(:\\d*)?([^#\\s]*)";   
  107.   
  108.     /**  
  109.      * 匹配并提取http 
     
  110.      *  
  111.      * 格式: http://XXX.XXX.XXX.XX/XXX.XXX?XXX=XXX 或 ftp://XXX.XXX.XXX 或 https://XXX  
  112.      *  
  113.      * 匹配 : http://www.suncer.com:8080/index.html?login=true
     
  114.      *  
  115.      * 提取(MatchResult matchResult=matcher.getMatch()):  
  116.      *              matchResult.group(0)= http://www.suncer.com:8080/index.html?login=true  
  117.      *              matchResult.group(1) = http  
  118.      *              matchResult.group(2) = www.suncer.com  
  119.      *              matchResult.group(3) = :8080  
  120.      *              matchResult.group(4) = /index.html?login=true  
  121.      *  
  122.      * 不匹配: news://www  
  123.      *  
  124.      */  
  125.     public static final String http_regexp = "(http|https|ftp)://([^/:]+)(:\\d*)?([^#\\s]*)";   
  126.   
  127.     /**  
  128.      * 匹配日期 
     
  129.      *  
  130.      * 格式(首位不为0): XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X 
     
  131.      *  
  132.      * 范围:1900--2099 
     
  133.      *  
  134.      * 匹配 : 2005-04-04 
     
  135.      *  
  136.      * 不匹配: 01-01-01  
  137.      *  
  138.      */  
  139.     public static final String date_regexp = "^((((19){1}|(20){1})d{2})|d{2})[-\\s]{1}[01]{1}d{1}[-\\s]{1}[0-3]{1}d{1}$";// 匹配日期   
  140.   
  141.     /**  
  142.      * 匹配电话 
     
  143.      *  
  144.      * 格式为: 0XXX-XXXXXX(10-13位首位必须为0) 或0XXX XXXXXXX(10-13位首位必须为0) 或 
     
  145.      * (0XXX)XXXXXXXX(11-14位首位必须为0) 或 XXXXXXXX(6-8位首位不为0) 或  
  146.      * XXXXXXXXXXX(11位首位不为0) 
     
  147.      *  
  148.      * 匹配 : 0371-123456 或 (0371)1234567 或 (0371)12345678 或 010-123456 或  
  149.      * 010-12345678 或 12345678912 
     
  150.      *  
  151.      * 不匹配: 1111-134355 或 0123456789  
  152.      *  
  153.      */  
  154.     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}$";   
  155.   
  156.     /**  
  157.      * 匹配身份证 
     
  158.      *  
  159.      * 格式为: XXXXXXXXXX(10位) 或 XXXXXXXXXXXXX(13位) 或 XXXXXXXXXXXXXXX(15位) 或  
  160.      * XXXXXXXXXXXXXXXXXX(18位) 
     
  161.      *  
  162.      * 匹配 : 0123456789123 
     
  163.      *  
  164.      * 不匹配: 0123456  
  165.      *  
  166.      */  
  167.     public static final String ID_card_regexp = "^\\d{10}|\\d{13}|\\d{15}|\\d{18}$";   
  168.   
  169.     /**  
  170.      * 匹配邮编代码 
     
  171.      *  
  172.      * 格式为: XXXXXX(6位) 
     
  173.      *  
  174.      * 匹配 : 012345 
     
  175.      *  
  176.      * 不匹配: 0123456  
  177.      *  
  178.      */  
  179.     public static final String ZIP_regexp = "^[0-9]{6}$";// 匹配邮编代码   
  180.   
  181.   
  182.     /**  
  183.      * 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号<  反斜杠\ 即空格,制表符,回车符等 )
     
  184.      *  
  185.      * 格式为: x 或 一个一上的字符 
     
  186.      *  
  187.      * 匹配 : 012345 
     
  188.      *  
  189.      * 不匹配: 0123456  
  190.      *  
  191.      */  
  192.     public static final String non_special_char_regexp = "^[^'\"\\;,:-<>\\s].+$";// 匹配邮编代码   
  193.   
  194.   
  195.     /**  
  196.      * 匹配非负整数(正整数 + 0)  
  197.      */  
  198.     public static final String non_negative_integers_regexp = "^\\d+$";   
  199.   
  200.     /**  
  201.      * 匹配不包括零的非负整数(正整数 > 0)  
  202.      */  
  203.     public static final String non_zero_negative_integers_regexp = "^[1-9]+\\d*$";   
  204.   
  205.     /**  
  206.      *  
  207.      * 匹配正整数  
  208.      *  
  209.      */  
  210.     public static final String positive_integer_regexp = "^[0-9]*[1-9][0-9]*$";   
  211.   
  212.     /**  
  213.      *  
  214.      * 匹配非正整数(负整数 + 0)  
  215.      *  
  216.      */  
  217.     public static final String non_positive_integers_regexp = "^((-\\d+)|(0+))$";   
  218.   
  219.     /**  
  220.      *  
  221.      * 匹配负整数  
  222.      *  
  223.      */  
  224.     public static final String negative_integers_regexp = "^-[0-9]*[1-9][0-9]*$";   
  225.   
  226.     /**  
  227.      *  
  228.      * 匹配整数  
  229.      *  
  230.      */  
  231.     public static final String integer_regexp = "^-?\\d+$";   
  232.   
  233.     /**  
  234.      *  
  235.      * 匹配非负浮点数(正浮点数 + 0)  
  236.      *  
  237.      */  
  238.     public static final String non_negative_rational_numbers_regexp = "^\\d+(\\.\\d+)?$";   
  239.   
  240.     /**  
  241.      *  
  242.      * 匹配正浮点数  
  243.      *  
  244.      */  
  245.     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]*))$";   
  246.   
  247.     /**  
  248.      *  
  249.      * 匹配非正浮点数(负浮点数 + 0)  
  250.      *  
  251.      */  
  252.     public static final String non_positive_rational_numbers_regexp = "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$";   
  253.   
  254.     /**  
  255.      *  
  256.      * 匹配负浮点数  
  257.      *  
  258.      */  
  259.     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]*)))$";   
  260.   
  261.     /**  
  262.      *  
  263.      * 匹配浮点数  
  264.      *  
  265.      */  
  266.     public static final String rational_numbers_regexp = "^(-?\\d+)(\\.\\d+)?$";   
  267.   
  268.     /**  
  269.      *  
  270.      * 匹配由26个英文字母组成的字符串  
  271.      *  
  272.      */  
  273.     public static final String letter_regexp = "^[A-Za-z]+$";   
  274.   
  275.     /**  
  276.      *  
  277.      * 匹配由26个英文字母的大写组成的字符串  
  278.      *  
  279.      */  
  280.     public static final String upward_letter_regexp = "^[A-Z]+$";   
  281.   
  282.     /**  
  283.      *  
  284.      * 匹配由26个英文字母的小写组成的字符串  
  285.      *  
  286.      */  
  287.     public static final String lower_letter_regexp = "^[a-z]+$";   
  288.   
  289.     /**  
  290.      *  
  291.      * 匹配由数字和26个英文字母组成的字符串  
  292.      *  
  293.      */  
  294.     public static final String letter_number_regexp = "^[A-Za-z0-9]+$";   
  295.   
  296.     /**  
  297.      *  
  298.      * 匹配由数字、26个英文字母或者下划线组成的字符串  
  299.      *  
  300.      */  
  301.     public static final String letter_number_underline_regexp = "^\\w+$";   
  302.   
  303.     /**  
  304.      * 添加正规表达式 (以key->value的形式存储)  
  305.      *  
  306.      * @param regexpName  
  307.      *            该正规表达式名称 `  
  308.      * @param regexp  
  309.      *            该正规表达式内容  
  310.      */  
  311.     public void putRegexpHash(String regexpName, String regexp)   
  312.     {   
  313.         regexpHash.put(regexpName, regexp);   
  314.     }   
  315.   
  316.     /**  
  317.      * 得到正规表达式内容 (通过key名提取出value[正规表达式内容])  
  318.      *  
  319.      * @param regexpName  
  320.      *            正规表达式名称  
  321.      *  
  322.      * @return 正规表达式内容  
  323.      */  
  324.     public String getRegexpHash(String regexpName)   
  325.     {   
  326.         if (regexpHash.get(regexpName) != null)   
  327.         {   
  328.             return ((String) regexpHash.get(regexpName));   
  329.         }   
  330.         else  
  331.         {   
  332.             System.out.println("在regexpHash中没有此正规表达式");   
  333.             return "";   
  334.         }   
  335.     }   
  336.   
  337.     /**  
  338.      * 清除正规表达式存放单元  
  339.      */  
  340.     public void clearRegexpHash()   
  341.     {   
  342.         regexpHash.clear();   
  343.         return;   
  344.     }   
  345.   
  346.     /**  
  347.      * 大小写敏感的正规表达式批配  
  348.      *  
  349.      * @param source  
  350.      *            批配的源字符串  
  351.      *  
  352.      * @param regexp  
  353.      *            批配的正规表达式  
  354.      *  
  355.      * @return 如果源字符串符合要求返回真,否则返回假 如:  Regexp.isHardRegexpValidate("ygj@suncer.com.cn",email_regexp) 返回真  
  356.      */  
  357.     public static boolean isHardRegexpValidate(String source, String regexp)   
  358.     {   
  359.   
  360.         try  
  361.         {   
  362.             // 用于定义正规表达式对象模板类型   
  363.             PatternCompiler compiler = new Perl5Compiler();   
  364.   
  365.             // 正规表达式比较批配对象   
  366.             PatternMatcher matcher = new Perl5Matcher();   
  367.   
  368.             // 实例大小大小写敏感的正规表达式模板   
  369.             Pattern hardPattern = compiler.compile(regexp);   
  370.   
  371.             // 返回批配结果   
  372.             return matcher.contains(source, hardPattern);   
  373.   
  374.         }   
  375.         catch (MalformedPatternException e)   
  376.         {   
  377.             e.printStackTrace();   
  378.   
  379.         }   
  380.         return false;   
  381.     }   
分享到:
评论
1 楼 letooneye 2012-07-10  
i like it

相关推荐

    一个java正则表达式工具类.txt

    一个java正规表达式工具类 关键字: 一个java正规表达式工具类 猛然想起两年写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴...

    详解java正规表达式工具类

    详解java正规表达式工具类 感觉很不错,学习与工作都有帮助

    java的正规表达式的java工具类

    分享一个java的正规表达式的java工具类,有用到的欢迎下载使用。类中用到了 jakarta-oro-2.0.jar 包,这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的...

    功能强大的Java正则表达式工具类,有这个就够了

    类中的方法全为静态的在这里,我将这个类定义成了一个单例,(本来只有static方法是不new去对象的,也就用不到单例了)是因为有一个 regexpHash(HashMap实例),为了可以动态添加正规表达式,不知道是不是想的太多了:) ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 ...

    编译原理全套

    5.4.3 一个含多态函数的语言 5.4.4 代换、实例和合一 5.4.5 多态函数的类型检查 5.5 类型表达式的等价 5.5.1 类型表达式的结构等价 5.5.2 类型表达式的名字等价 5.5.3 记录类型 5.5.4 类型表示中的环 5.6 函数...

    [编译原理].陈意云.文字版

    5.4.3 一个含多态函数的语言 5.4.4 代换、实例和合 5.4.5 多态函数的类型检查 5.5 类型表达式的等价 5.5.1 类型表达式的结构等价 5.5.2 类型表达式的名字等价 5.5.3 记录类型 5.5.4 类型表示中的环 ...

    c#学习笔记.txt

    /* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了一个爱情故事,可不要奇怪。有很多人用程序来表述爱情,在其中我能看到有Money,有Girl,有一些还涉及到Sex,但是我没有找到Love,我始终相信...

    Python编程入门经典

    3.3.1 引用最后一个元素 40 3.3.2 序列的范围 41 3.3.3 通过附加序列增长列表 41 3.3.4 使用列表临时存储数据 42 3.3.5 处理集合 43 3.4 本章小结 44 3.5 习题 44 第Ⅱ部分 Python语言和标准库 第4章 做出决策 49 ...

Global site tag (gtag.js) - Google Analytics