一旦在程序中定义了正则表达式之后,就可以使用Pattern和Matcher来使用正则表达式。
Pattern对象是正则表达式的编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。
// 将一个表达式编译成Pattern对象
Pattern p = Pattern.compile("a*b");
// 调用Pattern对象matcher方法匹配字符串, 返回Matcher对象
Matcher m = p.matcher("aaaaab");
// 根据需求调用Matcher方法
boolean b = m.matches();
System.out.println(b);
// 如果某个正则表达式仅需使用一次,可以直接使用Pattern类的静态matches方法
// 每次使用都需要重新编译得到Pattern对象,效率不高
boolean b1 = Pattern.matches("a*b", "aaaaab");
Matcher类提供的常用方法。
find():返回目标字符串中是否包含与 Pattern 匹配的子串
group():返回上一次与Pattern匹配的子串, 一定要先调用find()才能调用group()
start():返回上一次与Pattern 匹配的子串在目标字符串中的开始位置
end():返回上一次与Pattern 匹配的子串在目标字符串中的结束位置加1
lookingAt():返回目标字符串前面部分与Pattern是否匹配
matches():返回整个目标字符串与 Pattern是否匹配
reset():将现有的 Matcher对象应用于一个新的字符序列
replaceAll():将匹配的所有子串替换为目标字符串, 和字符串replaceAll()功能是一样
replaceFirst():将匹配的第一个子串替换为目标字符串, 和字符串replaceFirst()功能是一样
matches() 和 lookingAt()方法有点相似,只是matches()方法要求整个字符串和Pattern 完全匹配时返回true,而 lookingAt()只要字符串以Pattern开头就会返回true。
reset()方法可将现有的Matcher对象应用于新的字符串。