เพื่อจับคู่รูปแบบภายในอีกอันหนึ่ง (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