Pattern类:
用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式
Matcher类:
Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例。
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作。Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持。
示例代码1:
Pattern p1 = Pattern.compile("\\w+");
System.out.println(p1.pattern()); //返回\w+
Pattern p2 = Pattern.compile("\\d+");
String[] str = p2.split("qq:12345num:123333ss:111");
for (String string : str) {
System.out.println(string);
}
//返回:
//qq:
//num:
//ss:
System.out.println(Pattern.matches("\\d+","2223"));
System.out.println(Pattern.matches("\\d+","2223aa"));//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
System.out.println(Pattern.matches("\\d+","22bb23"));//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("222312");
System.out.println(m.matches());//true
System.out.println(m.end());//6
Pattern p3=Pattern.compile("\\d+");
Matcher m3=p3.matcher("aaa2223bb");
m3.find();//匹配2223
System.out.println(m3.start());//返回3
System.out.println(m3.end());//返回7,返回的是2223后的索引号
System.out.println(m3.group());//返回2223
示例代码2:
//通过compile()方法创建Pattern实例
Pattern pattern=Pattern.compile("java");
//通过match()创建Matcher实例
Matcher matcher=pattern.matcher("java Java java JAVA jAva");
while (matcher.find())//查找符合pattern的字符串
{
System.out.println("The result is here :" +
matcher.group() + "\n" + "It starts from "
+ matcher.start() + " to " + matcher.end() + ".\n");
}
输出结果:
The result is here :java
It starts from 0 to 4.
The result is here :java
It starts from 10 to 14.
在上面的代码Pattern pattern=Pattern.compile("java")改为Pattern pattern=Pattern.compile("java",Pattern.CASE_INSENSITIVE)。此时可以不区分大小写地查找。
忽略大小的写法也可以有以下简单方法:
System.out.println("Java".matches("(?i)(java)"));
输出结果是:true
//通过compile()方法创建Pattern实例
Pattern pattern = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
//通过match()创建Matcher实例
Matcher matcher=pattern.matcher("java Java java JAVA jAva avafdsafdsaf");
StringBuffer buffer=new StringBuffer();
int i=0;
while (matcher.find())
{
i++;
if(i%2==0)
{ //偶数项替换为JAVA
matcher.appendReplacement(buffer, "JAVA");
}
else { //基数项替换为java
matcher.appendReplacement(buffer, "java");
}
}
matcher.appendTail(buffer);//将剩余的不匹配部分也追加到buffer中
System.out.println(buffer);
输出: java JAVA java JAVA java avafdsafdsaf