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

จับคู่รูปแบบภายในอีกอันหนึ่งใน Java Regex

เพื่อจับคู่รูปแบบภายในอีกอันหนึ่ง (nested matching) ให้คอมไพล์ regex สำหรับรูปแบบภายนอก หาจับคู่ ดึงผลลัพธ์ แล้วนำเป็น input ของ Matcher ภายใน

ตัวอย่าง: หาตัวเลขภายในแท็ก <b>...</b>

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatcherExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        
        String regexOuter = "<b>(.*?)</b>";
        String regexInner = "\\d+";
        
        Pattern patternOuter = Pattern.compile(regexOuter);
        Pattern patternInner = Pattern.compile(regexInner);
        
        Matcher outerMatcher = patternOuter.matcher(input);
        while (outerMatcher.find()) {
            // outerMatcher.group(1) = ข้อความภายในแท็ก b
            Matcher innerMatcher = patternInner.matcher(outerMatcher.group(1));
            while (innerMatcher.find()) {
                System.out.println(innerMatcher.group());
            }
        }
    }
}

ผลลัพธ์

Enter input text: This is sample HTML data <b>123 sample text</b> hello 123
123

อธิบาย

  • Outer regex: <b>(.*?)</b> จับคู่ข้อความภายในแท็ก bold (non-greedy)
  • Inner regex: \\d+ จับคู่ตัวเลข
  • ใช้ outerMatcher.group(1) ดึงเฉพาะส่วนภายในแท็ก มาเป็น input ของ inner matcher
  • วิธีนี้เหมาะสำหรับ parsing HTML/XML แบบง่าย หรือข้อมูล巢狀

ข้อควรระวัง

สำหรับ HTML/XML ที่ซับซ้อน ควรใช้ parser จริง (เช่น Jsoup) แทน regex