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