正则表达式可以通过”()”来进行分组,更专业的表达就是捕获组,每个完整的”()”可以分为一组,同时,”()”中还可以嵌套”()”,即组之间还可以存在更小的组,以此类推。而编号为0的组,则是正则表达式匹配到的整体,这个规则只要支持正则表达式中捕获组的语言基本上都适用。
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部。
Java程序也可以正则表达式完美融入到程序中,而且非常好用,下面介绍几种不同的用法,可以根据自己应用需要进行选择。
普通捕获组编号规则
如果没有显式为捕获组命名,即没有使用命名捕获组,那么需要按数字顺序来访问所有捕获组。在只有普通捕获组的情况下,捕获组的编号是按照“(”出现的顺序,从左到右,从1开始进行编号的 。
正则表达式分组举例:(\d{4})-(\d{2}-(\d\d))
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
// Prepare regular expression. A group of 3 digits followed by 7 digits.
String regex = "\\b(\\d{3})\\d{7}\\b";
String source = "1111111111, 1111111, and 1111111111";
// Compile the regular expression
Pattern p = Pattern.compile(regex);
// Get Matcher object
Matcher m = p.matcher(source);
// Start matching and display the found area codes
while(m.find()) {/** 来 自 时 代 J a v a - nowjava.com**/
// Display the phone number and area code.
// group 1 captures first 3 digits of match,
// whereas group 0 will have the entire phone number.
// The matched text can be obtained using m.group() or m.group(0)
String phone = m.group();
String areaCode = m.group(1);
System.out.println("Phone: " + phone + ", Area Code: " + areaCode);
}
}
}
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {/**来 自 n o w j a v a . c o m**/
public static void main(String[] args) {
// Prepare the regular expression
String regex = "\\b(?<areaCode>\\d{3})(?<prefix>\\d{3})(?<lineNumber>\\d{4})\\b";
// Reference first two groups by names and the thrd oen as its number
String replacementText = "(${areaCode}) ${prefix}-$3";
String source = "1111111111, 1111111, and 1111111111";
// Compile the regular expression
Pattern p = Pattern.compile(regex);
// Get Matcher object
Matcher m = p.matcher(source);
// Replace the phone numbers by formatted phone numbers
/**
来 自 时 代 J a v a 公 众 号
**/
String formattedSource = m.replaceAll(replacementText);
System.out.println("Text: " + source);
System.out.println("Formatted Text: " + formattedSource);
}
}
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。