java正则表达式主要涉及三个类:java.util.regex.Matcher、java.util.regex.Pattern、java.util.regex.PatternSyntaxException
java.util.regex.Pattern
该类主要用来创建匹配规则,并没有公共构造函数,通过两个工厂函数构造Pattern对象,实例如下:
Pattern pattern = Pattern.compile("B(ond)"); //或者 Pattern pattern = Pattern.compile("B(ond)", 0);
java.util.regex.Matcher
引擎类,所有和正则表达式匹配相关的操作均在此类中实现,该类也没有构造函数,构造对象有两种方法:
Matcher match = pattern.matcher("test string Bond"); //方法二 String regex="B(ond)"; String strs= "test string Bond"; Matcher mt = Pattern.matches(regex, strs);
实例1:
String strs = "My name is Bond. James Bond."; Pattern pattern = Pattern.compile("B(ond)"); Matcher matcher = pattern.matcher(strs); while(matcher.find()){ System.out.println("group" + 0 + ":" + matcher.group(0)); int gc = matcher.groupCount(); for(int i = 1; i<= gc; ++i) { System.out.println("group" + i + ":" + matcher.group(i)); } }
matcher.find()函数根据正则表示在字符串上从做到右做匹配,匹配一个则返回true,下一次匹配从当前匹配的结尾处开始
matcher.group(0)分组的概念:整个正则匹配的就是第零组,然后根据左括号一次从左到右为第1、2、3组,在本实例中,正则表达B(ond)有两个组:bond(0组)、ond(第一组),matcher.group(i)返回当前匹配的第i组的字符串 matcher.groupCount():返回匹配的组的个数,注意这里统计不计第零组 输出结果如下:group0:Bond group1:ond
实例2
String strs = "My name is Bond. James Bond."; Pattern pattern = Pattern.compile("B(ond)"); Matcher matcher = pattern.matcher(strs); while(matcher.find()){ System.out.println("group" + 0 + ":" + matcher.group(0)); int gc = matcher.groupCount(); for(int i = 1; i<= gc; ++i) { System.out.println("group" + i + ":" + matcher.group(i)); } } matcher.reset(); if(matcher.matches()){ System.out.println("all matches:"+ matcher.group(0)); }else{ System.out.println("First all matches fail"); } matcher = pattern.matcher("Bond"); if(matcher.matches()){ System.out.println("all matches:"+ matcher.group(0)); }
实例2同实例1相比,多了几个函数
第一个mather.reset():将所有与匹配相关的状态重置,重置后的结果跟pattern.matcher(strs);第一次执行完的效果一样 第二个matcher.matches(),这个函数同matcher.find()函数相比,matches()是在整个字符串上做匹配,整个字符串匹配正则规则才会返回true;而find()是在字符串中做匹配,匹配到一个字符串就返回true,通过group()函数获取匹配的字符串,通过start()以及end()函数可以获取匹配的位置 输出如下:group0:Bond group1:ond group0:Bond group1:ond First all matches fail all matches:Bond