Named Capturing Groups อนุญาตให้อ้างอิงกลุ่มจับคู่ (capturing groups) ด้วยชื่อ แทนที่จะใช้หมายเลขกลุ่ม Java รองรับตั้งแต่ Java SE 7
ตัวอย่าง: แยกส่วนหมายเลขโทรศัพท์
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAll {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
// (?<name>...) = named capturing group
String regex = "(?<globalCode>[\\d]{2})-(?<nationalCode>[\\d]{5})-(?<number>[\\d]{6})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println("Global code: " + matcher.group("globalCode"));
System.out.println("National code: " + matcher.group("nationalCode"));
System.out.println("Phone number: " + matcher.group("number"));
}
}
}
ผลลัพธ์
Enter input text: 91-08955-224558
Global code: 91
National code: 08955
Phone number: 224558
อธิบาย
(?<globalCode>[\\d]{2})- กลุ่มชื่อ globalCode จับคู่ 2 หลัก(?<nationalCode>[\\d]{5})- กลุ่มชื่อ nationalCode จับคู่ 5 หลัก(?<number>[\\d]{6})- กลุ่มชื่อ number จับคู่ 6 หลัก- อ้างอิงด้วย
matcher.group("name")แทนmatcher.group(1)
ข้อดีของ Named Groups
- โค้ดอ่านง่าย เข้าใจง่าย
- ไม่ต้องนับลำดับกลุ่ม
- แก้ไข regex ง่ายขึ้น ไม่กระทบโค้ดที่อ้างอิงกลุ่ม
- รองรับใน Java 7+