Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。
它包括两个类:Pattern和Matcher 。
Pattern: 一个Pattern是一个正则表达式经编译后的表现模式。
Matcher: 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。
首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Pattern p = Pattern.compile( "cat" ); Matcher m = p.matcher( "one cat two cats in the yard" ); //输入序列 StringBuffer sb = new StringBuffer(); while (m.find()) { System.out.println( "以前匹配的初始索引---" + m.start()); System.out.println( "最后匹配位置的索引---" + m.end()); m.appendReplacement(sb, "dog" ); //第一次匹配后添加位置变为8,第二次匹配后添加位置变为16 System.out.println( "sb=" +sb); } m.appendTail(sb); // System.out.println(sb.toString()); -------------------------输出--------------------------------------------------------------------- 以前匹配的初始索引--- 4 最后匹配位置的索引--- 7 sb=one dog 以前匹配的初始索引--- 12 最后匹配位置的索引--- 15 sb=one dog two dog one dog two dogs in the yard |
1. public Matcher appendReplacement(StringBuffer sb, String replacement)
sb -- 字符串缓冲区
replacement -- 替换字符串
1 | 该方法做 3 件事: |
1 2 3 4 5 | 1. 它从添加位置开始在输入序列读取字符,并将其添加到给定字符串缓冲区。< br >在读取以前匹配之前的最后字符(即位于索引 start() - 1 处的字符)之后,它就会停止。< br >即将匹配字符串之前的所有字符添加到缓冲区。 2. 它将给定替换字符串添加到字符串缓冲区。 即将replacement添加到缓冲区。 3. 它将此匹配器的添加位置设置为最后匹配位置的索引加 1,即 end()。进行下一次匹配。 |
注:字符串缓冲区会已记录一个添加位置,从0开始。做完以上3件事以后,字符串缓冲区的添加位置设置为最后匹配位置的索引加1即匹配到的字符串结束位置加1.
2. public StringBuffer appendTail(StringBuffer sb)
sb -- 目标字符串缓冲区
1 | 此方法从添加位置开始从输入序列读取字符,并将其添加到给定字符串缓冲区。可以在一次或多次调用 appendReplacement 方法后调用它来复制剩余的输入序列。 |
注:appendReplacement替换完所有的字符串以后,输入序列的剩余字符从添加位置添加到字符串缓冲区。