Pattern和Matcher

Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式。
Pattern的基础用法:

Pattern p = Pattern.compile("China");
String s = "123China456China789China";
String[] a = p.split(s);
for (String b : a) {
	System.out.print(b);
}

输出:123456789


Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持,

要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使用。

Matcher有三个基本都匹配方法:

matches() 用于全字符串匹配
lookingAt() 从字符串最开头开始匹配满足的子串
find() 可以对任意位置字符串匹配 (find(start)可以从start为起始索引值开始向后匹配)

例子:

Pattern p = Pattern.compile("China");
Matcher m1 = p.matcher("China");
Matcher m2 = p.matcher("Hello, China");
Matcher m3 = p.matcher("China, Hello");
System.out.println(m1.matches());// true
System.out.println(m1.lookingAt());// true
System.out.println(m1.find());// false
System.out.println(m2.matches());// false
System.out.println(m2.lookingAt());// false
System.out.println(m2.find());// true
System.out.println(m3.matches());// false
System.out.println(m3.lookingAt());// true
System.out.println(m3.find());// false

如果把m的find()放在每一个m的最开始,则输出都是true。


start() 返回字符串的起始索引
end() 返回字符串的结束索引
group() 返回匹配到的字符串
例子:

Pattern p = Pattern.compile("China");
Matcher m = p.matcher("aaaChinabbb");
m.find();// 一定要加上,不然报错
System.out.println(m.start());// 3
System.out.println(m.end());// 8
System.out.println(m.group());// China


group(int i),groupCount()用于分组操作

例子:

Pattern p = Pattern.compile("(James)(Irving)");
Matcher m = p.matcher("111JamesIrving222"); // 两组要连在一起,不然报错
m.find();// 一定要加上,不然报错
// groupCount是捕获组的数量。捕获组是正则表达式语法中的概念,一个()为一个捕获组。
System.out.println(m.groupCount());// 2
System.out.println(m.group(1));// James
System.out.println(m.group(2));// Irving


两种用于重置当前匹配器的方法:reset()和reset(CharSequence input)

例子:

Pattern p = Pattern.compile("James");
Matcher m = p.matcher("111James222");
m.find();// 一定要加上,不然报错
System.out.println(m.group());// James
m.reset();// 如果没有reset,后面会报错
m.find();
System.out.println(m.group());// James
m.reset("Irving");
System.out.println(m.find());// false


替换全部匹配到的字符串:replaceFirst() 和 replaceAll()

例子:

Pattern p = Pattern.compile("James");
String s = "JamesJames";
Matcher m = p.matcher(s);
System.out.println(m.replaceFirst("Irving"));// IrvingJames
System.out.println(m.replaceAll("Irving"));// IrvingIrving
System.out.println(s);// JamesJames

appendReplacement允许直接将匹配的字符串保存在另一个StringBuffer中并且是渐进式匹配,
并不是只匹配依次或匹配全部,

而appendTail则是将未匹配到的余下的字符串添加到StringBuffer中。

例子:

Pattern p = Pattern.compile("James");
Matcher m = p.matcher("JamesIrving");
m.find();
StringBuffer sb = new StringBuffer();
m.appendReplacement(sb, "Curry");
System.out.println(sb);// Curry
m.appendTail(sb);
System.out.println(sb);// CurryIrving

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值