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则分别对应匹配项在字符串中索引的起始值与结束值。