Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Tìm khớp bên trong khớp khác - Java Regular Expressions


Kỹ thuật

Để khớp pattern bên trong một match khác: compile regex ngoài, tìm match, lấy kết quả (group), dùng làm input cho Matcher trong.

Ví dụ: Tìm số trong thẻ <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("Nhập văn bản: ");
        String input = sc.nextLine();
        String regexOuter = "(.*?)";
        String regexInner = "\\d+";
        Pattern patternOuter = Pattern.compile(regexOuter);
        Pattern patternInner = Pattern.compile(regexInner);
        Matcher outerMatcher = patternOuter.matcher(input);
        while (outerMatcher.find()) {
            Matcher innerMatcher = patternInner.matcher(outerMatcher.group(1));
            while (innerMatcher.find()) {
                System.out.println(innerMatcher.group());
            }
        }
    }
}

Kết quả

Nhập văn bản: This is sample HTML data 123 sample text hello 123
123

Giải thích

  • Regex ngoài <b>(.*?)</b> bắt nội dung trong thẻ bold (non-greedy).
  • Regex trong \\d+ tìm số trong nội dung đó.
  • outerMatcher.group(1) trả về group 1 (bên trong ngoặc) của match ngoài.

Ứng dụng thực tế

  • Parse HTML/XML: trích xuất thuộc tính, nội dung thẻ lồng nhau
  • Phân tích log: tìm pattern trong dòng đã lọc
  • Validate dữ liệu có cấu trúc phân cấp