1.最简单的模式匹配判断
Pattern.matches(regex, str),它等同于Pattern.compile(regex).matcher(str).matches();
2.按模式分割字符串
Pattern.compile(regex).split(str),它等同于str.split(regex)
3.Matcher对象
Matcher m = Pattern.compile(regex).matcher(str)
m.maches(),对整个字符串进行匹配,整个字符串都匹配才返回true.
m.lookingAt(),字符串(str)以指定模式(regex)开始返回true
m.find(),字符串(str)在任意位置指定匹配模式(regex)就返回true
在执行过上述返回boolean值的方法之后,可以执行m.start()、m.end()、m.group()返回匹配细节
m.start()匹配字符串在母串中的index
m.end()匹配字符串的最后一个字符在母串中的index+1
m.group()匹配到的字符串
如果指定模式(regex)中包含分组(用小括号扩起来的部分),start、end和group方法也可以用参数指定获取哪个分组的细节。容易忽略的是,整个模式自身算是第0个分组。例如:
m.start() == m.start(0);
m.end() == m.end(0);
m.group() == m.group(0);
Matcher m = Pattern.compile("([a-z]+)(\\d+)").matcher("fasf2334");
m.find();
m.start();//匹配到整个字符串,开始索引是0
m.start(0);//等于m.start(),结果也是0
m.start(1);//匹配到第一个模式[a-z]+,也就是字符串“fasf”,所以开始索引是0
m.start(2);//匹配到第二个模式\d+,也就是字符串“2334”,所以开始索引是4
4.m.find()方法
由于m.find()方法可以匹配模式在字符串中任意位置的出现,所以可能会匹配到多次。
Matcher m = Pattern.compile("\\d+").matcher("fasf2334ss22s");
while (m.find()) {
System.out.println(m.group());
System.out.println(m.start());
System.out.println(m.end());
System.out.println();
}
输出结果为:
2334
4
8
22
10
12