find( )
Matcher.find( )的功能是发现CharSequence里的,与pattern相匹配的多个字符序列。例如:
java.util.regex.*;
com.bruceeckel.simpletest.*;
java.util.*;
FindDemo {
Test monitor = Test();
main(String[] args) {
Matcher m = Pattern.compile()
.matcher();
(m.find())
System.out.println(m.group());
i = 0;
(m.find(i)) {
System.out.print(m.group() + );
i++;
}
monitor.expect( String[] {
,
,
,
,
,
,
,
,
+
+
});
}
}
"//w+"的意思是"一个或多个单词字符",因此它会将字符串直接分解成单词。find( )像一个迭代器,从头到尾扫描一遍字符串。第二个find( )是带int参数的,正如你所看到的,它会告诉方法从哪里开始找——即从参数位置开始查找。
Groups
Group是指里用括号括起来的,能被后面的表达式调用的正则表达式。Group 0 表示整个表达式,group 1表示第一个被括起来的group,以此类推。所以;
A(B(C))D
里面有三个group:group 0是ABCD, group 1是BC,group 2是C。
你可以用下述Matcher方法来使用group:
public int groupCount( )返回matcher对象中的group的数目。不包括group0。
public String group( ) 返回上次匹配操作(比方说find( ))的group 0(整个匹配)
public String group(int i)返回上次匹配操作的某个group。如果匹配成功,但是没能找到group,则返回null。
public int start(int group)返回上次匹配所找到的,group的开始位置。
public int end(int group)返回上次匹配所找到的,group的结束位置,最后一个字符的下标加一。
java.util.regex.*;
com.bruceeckel.simpletest.*;
Groups {
Test monitor = Test();
String poem =
+
+
+
+
+
+
+
;
main(String[] args) {
Matcher m =
Pattern.compile()
.matcher(poem);
(m.find()) {
( j = 0; j <= m.groupCount(); j++)
System.out.print( + m.group(j) + );
System.out.println();
}
monitor.expect( String[]{
+
,
,
+
,
+
,
+
,
+
,
,
+
});
}
}
这首诗是Through the Looking Glass的,Lewis Carroll的"Jabberwocky"的第一部分。可以看到这个正则表达式里有很多用括号括起来的group,它是由任意多个连续的非空字符('/S+')和任意多个连续的空格字符('/s+')所组成的,其最终目的是要捕获每行的最后三个单词;'$'表示一行的结尾。但是'$'通常表示整个字符串的结尾,所以这里要明确地告诉正则表达式注意换行符。这一点是由'(?m)'标志完成的(模式标志会过一会讲解)。
start( )和end( )
如果匹配成功,start( )会返回此次匹配的开始位置,end( )会返回此次匹配的结束位置,即最后一个字符的下标加一。如果之前的匹配不成功(或者没匹配),那么无论是调用start( )还是end( ),都会引发一个IllegalStateException。下面这段程序还演示了matches( )和lookingAt( ):









