Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Named Captured Groups ใน Java Regex

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+