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