注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 CCNA教材推荐
 帮助

Java中使用正则表达式校验字符串


2008-03-10 15:54:20
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。

Java中使用正则表达式校验字符串

正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系。至于具体谁发明的,怎么发明的,我也忘记了:)。
 
正则表达式简单理解就是用来匹配字符串,看看所给字符串是否与正则表达式匹配,通过匹配关系,可以做很多事情,比如搜索引擎、替换、校验、分割等等。但最基本的还是用来校验匹配关系。 Java SE中早已实现了正则表达式的引擎,并且有着广泛的应用。
 
参考JDK API文档,Java的正则表达式API集中在java.util.regex包里面,其下有两个核心类:
 
软件包 java.util.regex
用于匹配字符序列与正则表达式指定模式的类。
 
接口摘要
MatchResult 匹配操作的结果。
 
类摘要
Matcher 通过解释 Pattern 对 字符序列 执行匹配操作的引擎。
Pattern 正则表达式的编译表示形式。
 
异常摘要
PatternSyntaxException 抛出未经检查的异常,表明正则表达式模式中的语法错误。
 
具体功能很多,用法也很灵活,现在给出一个例子,用来校验一个字符串:
 
这个字符串必须符合如下格式:
1、第一个字母为R,后跟两个数字,然后是一个下划线,后面再跟两个字母,两个数字;还有可以跟一个下划线带两个数字。
2、十一个数字。
3、年度:四个数字,首位必须为1或者2。
4、月份:01~12
以上四个部分之间用横杠连接。
 
例如,一下是格式良好的字符串
R05_QD01-34010000000-2007-12
R23_QD21_02-34010000000-2007-01
 
 
下面给出个例子看看:
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
* Created by IntelliJ IDEA.
* File: RegExDemo.java
* User: leizhimin
* Date: 2008-3-10 15:55:24
*/

public class RegExDemo {
    private static String regEx1 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-0[1-9]";
    private static String regEx2 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-1[012]";
    private static String regEx3 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-[NABCXQD]";

    /**
     * 验证报表代码是否符合编码规则
     *
     * @param rptCode 报表代码
     * @return 验证结果,验证通过返回true,失败返回false
     */

    public static boolean isRegularRptCode(String rptCode) {
        Pattern p1 = Pattern.compile(regEx1);
        Pattern p2 = Pattern.compile(regEx2);
        Pattern p3 = Pattern.compile(regEx3);
        Matcher m1 = p1.matcher(rptCode);
        Matcher m2 = p2.matcher(rptCode);
        Matcher m3 = p3.matcher(rptCode);
        boolean rs1 = m1.matches();
        boolean rs2 = m2.matches();
        boolean rs3 = m3.matches();
        return rs1 || rs2 || rs3;
    }

    public static void main(String args[]) {
        String s1 = "R05_QD01-34010000000-2007-12";
        boolean flag1 = isRegularRptCode(s1);
        System.out.println("字符串 " + s1 + " 验证" + (flag1 ? "成功!" : "失败!"));

        String s2 = "R23_QD21_02-34010000000-2007-01";
        boolean flag2 = isRegularRptCode(s2);
        System.out.println("字符串 " + s2 + " 验证" + (flag2 ? "成功!" : "失败!"));
    }
}
 
运行结果:
字符串 R05_QD01-34010000000-2007-12 验证成功!
字符串 R23_QD21_02-34010000000-2007-01 验证成功!

Process finished with exit code 0
 
有关正则表达式的用法很简单,其实最关键的是要能写出所需要的正则表达式。有关语法可以参考Java API的java.util.regex.Pattern类。
 
另外,我在附件中给出了网上找到一个正则表达式文档,很不错,一起放上来。
 
 

本文出自 “熔 岩” 博客,转载请与作者联系!


附件下载:
  deelx_zh




    文章评论
 
2008-03-10 16:10:31
长知识了。。

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: