200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Java中使用正则表达式校验字符串

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

时间:2021-02-20 22:37:39

相关推荐

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

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--12 R23_QD21_02-34010000000--01 下面给出个例子看看: importjava.util.regex.Pattern;

importjava.util.regex.Matcher;

/**

* Created by IntelliJ IDEA.

* File: RegExDemo.java

* User: leizhimin

* Date: -3-10 15:55:24

*/

publicclassRegExDemo {

privatestaticString regEx1 ="R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-0[1-9]";

privatestaticString regEx2 ="R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-1[012]";

privatestaticString regEx3 ="R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-[NABCXQD]";

/**

* 验证报表代码是否符合编码规则

*

* @param rptCode 报表代码

* @return 验证结果,验证通过返回true,失败返回false

*/

publicstaticbooleanisRegularRptCode(String rptCode) {

Pattern p1 = pile(regEx1);

Pattern p2 = pile(regEx2);

Pattern p3 = pile(regEx3);

Matcher m1 = p1.matcher(rptCode);

Matcher m2 = p2.matcher(rptCode);

Matcher m3 = p3.matcher(rptCode);

booleanrs1 = m1.matches();

booleanrs2 = m2.matches();

booleanrs3 = m3.matches();

returnrs1 || rs2 || rs3;

}

publicstaticvoidmain(String args[]) {

String s1 ="R05_QD01-34010000000--12";

booleanflag1 = isRegularRptCode(s1);

System.out.println("字符串 "+ s1 +" 验证"+ (flag1 ?"成功!":"失败!"));

String s2 ="R23_QD21_02-34010000000--01";

booleanflag2 = isRegularRptCode(s2);

System.out.println("字符串 "+ s2 +" 验证"+ (flag2 ?"成功!":"失败!"));

}

} 运行结果: 字符串 R05_QD01-34010000000--12 验证成功!

字符串 R23_QD21_02-34010000000--01 验证成功!

Process finished with exit code 0

有关正则表达式的用法很简单,其实最关键的是要能写出所需要的正则表达式。有关语法可以参考Java API的java.util.regex.Pattern类。 另外,我在附件中给出了网上找到一个正则表达式文档,很不错,一起放上来。 下面是另外一个API测试例子: importjava.util.regex.Matcher;

importjava.util.regex.Pattern;

/**

* Created by IntelliJ IDEA.

*

* @author leizhimin -6-18 16:00:49

*/

publicclassTestPattern {

publicstaticvoidmain(String args[]) {

test1();

test2();

test3();

}

publicstaticvoidtest1() {

//创建正则表达式的模式对象

Pattern p = pile("a*b");//零次或多次a,并跟着b

//通过模式对象创建一个匹配对象

Matcher m1 = p.matcher("aaaaabxyzabt");

Matcher m2 = p.matcher("aaaaab");

//尝试将整个区域与模式匹配。当且仅当整个区域序列匹配此匹配器的模式时才返回 true。

booleanb11 = m1.matches();

booleanb12 = m2.matches();

System.out.println(b11 +"\t"+ b12);

//编译给定正则表达式并尝试将给定输入与其匹配。

booleanb21 = Pattern.matches("a*b","aaaaabxyzabt");

booleanb22 = Pattern.matches("a*b","aaaaab");

System.out.println(b21 +"\t"+ b22);

System.out.println(p.flags());

}

/**

* 进行大小写忽略和多行模式测试

*/

publicstaticvoidtest2() {

Pattern p1 = pile("a*b", Pattern.CASE_INSENSITIVE);

Pattern p2 = pile("a*b", Pattern.MULTILINE);

Matcher m11 = p1.matcher("aaaaaBABzAbt");

Matcher m12 = p1.matcher("Ab");

Matcher m21 = p2.matcher("a\n"+"b");

Matcher m22 = p2.matcher("ab");

booleanb11 = m11.matches();

booleanb12 = m12.matches();

System.out.println(b11 +"\t"+ b12);

booleanb21 = m21.matches();

booleanb22 = m22.matches();

System.out.println(b21 +"\t"+ b22);

System.out.println(p1.flags());//返回此模式的匹配标志。

System.out.println(p1.pattern());//返回在其中编译过此模式的正则表达式。

System.out.println(Pattern.quote("aaaaa"));//返回指定 String 的字面值模式 String。

String[] arr1 = p1.split("xabyayAbt");//围绕此模式的匹配拆分给定输入序列。

for(String s : arr1) {

System.out.println(s);

}

String[] arr2 = p1.split("xabyayAbt", 2);//围绕此模式的匹配拆分给定输入序列。

for(String s : arr2) {

System.out.println(s);

}

System.out.println(p1.toString());//返回此模式的字符串表示形式。

}

publicstaticvoidtest3() {

Pattern p = pile("cat");

Matcher m = p.matcher("cat two cats in the yard");

System.out.println(m.groupCount());

System.out.println(m.matches());

System.out.println(m.find());

System.out.println(m.find(8));

StringBuffer sb =newStringBuffer();

while(m.find()) {

m.appendReplacement(sb,"dog");

}

m.appendTail(sb);

System.out.println(sb.toString());

System.out.println(m.replaceAll("person"));

System.out.println(m.replaceFirst("person"));

while(m.find()) {

System.out.println(m.group());

}

}

} 本文转自 leizhimin 51CTO博客,原文链接:/lavasoft/64994,如需转载请自行联系原作者

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。