Java中使用正则表达式校验字符串
2011-12-12 12:05
627 查看
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类。
另外,我在附件中给出了网上找到一个正则表达式文档,很不错,一起放上来。
下面是另外一个API测试例子:
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by IntelliJ IDEA. * * @author leizhimin 2007-6-18 16:00:49 */ public class TestPattern { public static void main(String args[]) { test1(); test2(); test3(); } public static void test1() { //创建正则表达式的模式对象 Pattern p = Pattern.compile("a*b");//零次或多次a,并跟着b //通过模式对象创建一个匹配对象 Matcher m1 = p.matcher("aaaaabxyzabt"); Matcher m2 = p.matcher("aaaaab"); //尝试将整个区域与模式匹配。当且仅当整个区域序列匹配此匹配器的模式时才返回 true。 boolean b11 = m1.matches(); boolean b12 = m2.matches(); System.out.println(b11 + "\t" + b12); //编译给定正则表达式并尝试将给定输入与其匹配。 boolean b21 = Pattern.matches("a*b", "aaaaabxyzabt"); boolean b22 = Pattern.matches("a*b", "aaaaab"); System.out.println(b21 + "\t" + b22); System.out.println(p.flags()); } /** * 进行大小写忽略和多行模式测试 */ public static void test2() { Pattern p1 = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE); Pattern p2 = Pattern.compile("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"); boolean b11 = m11.matches(); boolean b12 = m12.matches(); System.out.println(b11 + "\t" + b12); boolean b21 = m21.matches(); boolean b22 = m22.matches(); System.out.println(b21 + "\t" + b22); //返回此模式的匹配标志。 System.out.println(p1.flags()); //返回在其中编译过此模式的正则表达式。 System.out.println(p1.pattern()); //返回指定 String 的字面值模式 String。 System.out.println(Pattern.quote("aaaaa")); //围绕此模式的匹配拆分给定输入序列。 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()); } public static void test3() { Pattern p = Pattern.compile("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 = new StringBuffer(); 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()); } } }
相关文章推荐
- Java中使用正则表达式校验字符串
- Java中使用正则表达式校验字符串
- Java中使用正则表达式校验字符串
- Java正则表达式 做校验验证字符串中全是字符和数字组成
- Java_正则表达式_推荐在复杂字符串操作中使用正则表达式
- 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础
- 判断字符串中有多少中文字符*java正则表达式使用
- Java - 抓取优酷网视频播放页面(使用jsoup解析html,正则表达式处理字符串)
- [改善Java代码]推荐在复杂字符串操作中使用正则表达式
- java-使用正则表达式截取字符串中的时间信息
- 如何使用java正则表达式去除掉字符串前面的空格
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- Java使用正则表达式截取重复出现的XML字符串功能示例
- Java源码-使用正则表达式校验数据有效性
- java使用正则表达式的方法从json格式的字符串中提取需要的字符串
- java使用正则表达式获取字符串中的所有英文单词或数字
- java正则表达式 分段解析字符串使用(.*?)(?=)
- JAVA环境使用正则表达式处理字符串
- 使用正则表达式校验字符串是否为数值(包含小数与负数)
- java 使用正则表达式统计一个字符串中子字符串出现次数