Java關於正則表達式的API有一些概念不是很清楚,最近需要用到,特別研究了一下,轉載一篇文章以釋疑
Java中關於正則表達式的函數接口有,group(),start(),end(),何爲group,一組這裏指的應爲一個正則表達式中的一個子表達式。
示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "Hello,World! in Java.";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println("Group 0:" + matcher.group(0));// 得到第0組——整個匹配
System.out.println("Group 1:" + matcher.group(1));// 得到第一組匹配——與(or)匹配的
System.out.println("Group 2:" + matcher.group(2));// 得到第二組匹配——與(ld!)匹配的,組也就是子表達式
System.out.println("Start 0:" + matcher.start(0) + " End 0:" + matcher.end(0));// 總匹配的索引
System.out.println("Start 1:" + matcher.start(1) + " End 1:" + matcher.end(1));// 第一組匹配的索引
System.out.println("Start 2:" + matcher.start(2) + " End 2:" + matcher.end(2));// 第二組匹配的索引
System.out.println(str.substring(matcher.start(0), matcher.end(1)));// 從總匹配開始索引到第1組匹配的結束索引之間子串——Wor
}
}
}
輸出結果爲Group 0:World!
Group 1:or
Group 2:ld!
Start 0:6 End 0:12
Start 1:7 End 1:9
Start 2:9 End 2:12
Wor
注意,在Java正則表達式API中組的概念,函數start(int i),end(int i),參數i的含義即爲子表達式的索引,而start,end則分別對應匹配項在字符串中索引的起始值與結束值。