關於pattern,matcher的各個函數有javadoc沒啥好說的。
不過還是有一點需要強調強調,第一是這個group,其實有groupCount+1組
group(0)對應的是整個Regex匹配部分,group(1)~group(groupCount)則是小括弧內匹配部分。
而且這個分組的對象,是一次find以後,Regex匹配到的那一段字串
比如一個String ,(s1)xxx(s2)有s1,s2兩部分符合要求,那麼一次find以後,所有group都是在S1內部的
第二次find後,所有group都是在S2內部的內容
1 import java.util.regex.Matcher;
2 import java.util.regex.Pattern;
3
4 public class RegexTest {
5
6 public static void printMatched(String regex, String source) {
7 Pattern p = Pattern.compile(regex);
8 Matcher m = p.matcher(source);
9 while (m.find()) {
10 for (int i = 0; i <= m.groupCount(); i++) {
11 System.out.println(m.group(i));
12 }
13 }
14 }
15
16 public static void main(String[] arg) {
17 RegexTest.printMatched("<(\\w+)>.*</(\\1)>",
18 "<table><td>sdjfjfiweif</td></table><cd>sdfsdf</cd>");
19
20 }
21 }
22
[2008-8-13補充]java中String有replace,replaceAll兩個方法,其實都是對所有匹配項進行替換。只是replaceAll支援Regex。
很多人拿replaceAll當replace用,出問題了還不知道怎麼回事。