নেস্টেড ম্যাচিং কী?
যদি আপনাকে একটি বড় প্যাটার্নের ভিতরে আবার একটি ছোট প্যাটার্ন ম্যাচ করতে হয় (যেমন HTML ট্যাগের ভিতরে সংখ্যা খুঁজা), তবে নেস্টেড ম্যাচিং বা ম্যাচের ভিতরে ম্যাচ পদ্ধতি ব্যবহার করতে হয়।
পদ্ধতি
- আউটার (বাহিরের) রেগেক্স কম্পাইল করুন।
- আউটার ম্যাচার দিয়ে ম্যাচ খুঁজুন।
- প্রতিটি আউটার ম্যাচের গ্রুপ ১ (ক্যাপচার্ড কন্টেন্ট) নিন।
- ইনার (ভিতরের) রেগেক্স কম্পাইল করুন।
- আউটার ম্যাচের কন্টেন্টে ইনার ম্যাচার চালান।
কোড উদাহরণ: HTML Bold ট্যাগের ভিতরে ডিজিট খুঁজা
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NestedMatchingExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
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()) {
// গ্রুপ ১: ট্যাগের ভিতরের কন্টেন্ট
String innerContent = outerMatcher.group(1);
// ইনার ম্যাচার তৈরি করুন ভিতরের কন্টেন্ট দিয়ে
Matcher innerMatcher = patternInner.matcher(innerContent);
while (innerMatcher.find()) {
System.out.println("পাওয়া গেছে: " + innerMatcher.group());
}
}
}
}
আউটপুট উদাহরণ
ইনপুট টেক্সট লিখুন: This is sample HTML data 123 sample text hello 123
123
ব্যাখ্যা: বাহিরের `123 sample text` ম্যাচ হয়েছে। তার ভিতর থেকে ইনার রেজেক্স `\d+` দিয়ে শুধু `123` পাওয়া গেছে। বাকি `hello 123` বোল্ড ট্যাগের বাইরে থাকায় উপেক্ষা হয়েছে।
ব্যবহারিক فعلىস্পেস
- HTML/XML পার্সিং: ট্যাগের ভিতরে নির্দিষ্ট ডেটা এক্সট্রাক্ট করা।
- লগ অ্যানালিসিস: লগ এন্ট্রির ভিতরে টাইমস্ট্যাম্প, IP, এরর কোড খুঁজা।
- ডেটা ভ্যালিডেশন: কন্টেইনারের ভিতরে সাব-ফিল্ড ভ্যালিডেট করা।
সাবধানতা
- রিকার্সিভ নেস্টিং (ম্যাচের ভিতরে ম্যাচের ভিতরে ম্যাচ) এর জন্য রিকার্সিভ ফাংশন লিখতে হয়।
- পারফরম্যান্স: বড় টেক্সটে নেস্টেড লুপ স্লো হতে পারে। সম্ভব হলে সিংগেল পাস রেজেক্স লিখতে চেষ্টা করুন।
- HTML পার্সিংয়ের জন্য রেগেক্সের বদলে Jsoup বা JAXP ব্যবহার করা ভালো প্র্যাকটিস।
সারসংক্ষেপ
নেস্টেড ম্যাচিং-এ আউটার ম্যাচারের ক্যাপচার্ড গ্রুপ (`group(1)`) কে ইনার ম্যাচারের ইনপুট হিসেবে ব্যবহার করা হয়। এটি হায়েরার্কিক্যাল ডেটা (HTML, JSON, XML, লগ) থেকে নির্দিষ্ট তথ্য বের করার জন্য কার্যকর।