/**
* matches用于匹配整个字符,find找子串,其中find方法调用之后,
* 可调用Matcher的toString方法,返回的字符串中
* 的lastmatch来检查哪些子串获得匹配字
* ,不过最简单的方法是调用group(),注意reset的影响,lookingAt每次从头找
* 注意start和end方法必须能找到,才有返回值,否则就报错了
*/
//这是Pattern典型的调用顺序是
Pattern p = Pattern.compile("\\d{3,5}");//表示三到五个数字
String s = "123-34345-234-00";
Matcher m = p.matcher(s);
p(m.matches());//false
//重置匹配器。
m.reset();
p(m.find());//true尝试查找与该模式匹配的输入序列的下一个子序列或者子串比如123 调用toString查看哪一个匹配了
p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=123]注意lastmacth = 123
p(m.group());//123
p(m.start() + "-" + m.end());//由于end返回最后匹配字符之后的偏移量。 所以结果是0-3而不是0-2下面同理
p(m.find());//true 为34345
p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=34345]注意lastmatch=34345
p(m.group());//34345
p(m.start() + "-" + m.end());//4-9
p(m.find());//true 234匹配
p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=234]注意lastmatch=234
p(m.group());//234
p(m.start() + "-" + m.end());//10-13
p(m.find());//false 00不匹配
p(m.toString());//java.util.regex.Matcher[pattern=\d{3,5} region=0,16 lastmatch=]注意lastmatch=
p(m.start() + "-" + m.end());//此时报错,因为没有匹配的子串了
/**
* 经过上面运行结果可以发现,可以用下面的来查看有多少子串获得匹配,非常简洁
* 输出是
* 123
*34345
*234
*/
while (m.find()) {
p(m.group());
}
// lookingAt()尝试将从区域开头开始的输入序列与该模式匹配。 每次找都是从开始找,所以下面的都是true
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
// replacement
// 启用不区分大小写的匹配。
Pattern p1 = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m1 = p1.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
StringBuffer buf = new StringBuffer();
int i = 0;//计算有几个匹配值
/**
* appendReplacement(StringBuffer sb,//sb - 目标字符串缓冲区。
String replacement)把符合匹配的字符子串用replacement后,结果存入buf中
*/
while (m1.find()) {
i++;
if (i % 2 == 0) {
m1.appendReplacement(buf, "java");
} else {
m1.appendReplacement(buf, "JAVA");
}
}
m1.appendTail(buf);//如果不加此句p(buf)输出为JAVA java JAVA java IloveJAVA you hatejava
p(i);//6
p(buf);//加了 m1.appendTail(buf);后的输出JAVA java JAVA java IloveJAVA you hatejava afasdfasdf
public static void p(Object o) {
System.out.println(o);
}