রিলাক্ট্যান্ট কোয়ান্টিফায়ার কী?
গ্রিডি কোয়ান্টিফায়ার (ডিফল্ট) যতটুকু সম্ভব বেশি ম্যাচ করতে চায়। রিলাক্ট্যান্ট (নন-গ্রিডি) কোয়ান্টিফায়ার যতটুকু সম্ভব কম ম্যাচ করে — প্রথমে শূন্য/এক ক্যারেক্টার ম্যাচ করে, দরকার पड़লে বড়ায়। গ্রিডি কোয়ান্টিফায়ারের পরে `?` দিয়ে রিলাক্ট্যান্ট বানানো হয়।
রিলাক্ট্যান্ট কোয়ান্টিফায়ার তালিকা
| কোয়ান্টিফায়ার | ব্যাখ্যা |
|---|---|
| re*? | শূন্য বা অধিক, ন্যূনতম |
| re?? | শূন্য বা এক, ন্যূনতম |
| re+? | এক বা অধিক, ন্যূনতম |
| re{n}? | ঠিক n বার, ন্যূনতম |
| re{n,}? | কমপক্ষে n বার, ন্যূনতম |
| re{n,m}? | n থেকে m বার, ন্যূনতম |
কোড উদাহরণ: রিলাক্ট্যান্ট ডিজিট ম্যাচিং
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReluctantQuantifierExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
String input = sc.nextLine();
// রিলাক্ট্যান্ট: এক বা অধিক ডিজিট, কিন্তু ন্যূনতম
String regex = "[0-9]+?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.print("প্যাটার্ন পাওয়া গেছে " + matcher.start() + " থেকে " + (matcher.end()-1) + "::");
System.out.print(matcher.group());
System.out.println();
}
}
}
আউটপুট উদাহরণ
ইনপুট টেক্সট লিখুন: 12345678
প্যাটার্ন পাওয়া গেছে 0 থেকে 0::1
প্যাটার্ন পাওয়া গেছে 1 থেকে 1::2
প্যাটার্ন পাওয়া গেছে 2 থেকে 2::3
প্যাটার্ন পাওয়া গেছে 3 থেকে 3::4
প্যাটার্ন পাওয়া গেছে 4 থেকে 4::5
প্যাটার্ন পাওয়া গেছে 5 থেকে 5::6
প্যাটার্ন পাওয়া গেছে 6 থেকে 6::7
প্যাটার্ন পাওয়া গেছে 7 থেকে 7::8
ব্যাখ্যা: গ্রিডি vs রিলাক্ট্যান্ট
| ইনপুট | গ্রিডি [0-9]+ | রিলাক্ট্যান্ট [0-9]+? |
|---|---|---|
| "12345678" | একটি ম্যাচ: "12345678" | ৮টি ম্যাচ: "1","2","3","4","5","6","7","8" |
| "abc123def" | একটি ম্যাচ: "123" | ৩টি ম্যাচ: "1","2","3" |
কখন রিলাক্ট্যান্ট ব্যবহার করবেন?
- যখন আপনাকে সবচেয়ে ছোট ম্যাচ দরকার (যেমন HTML ট্যাগের ভিতরের কন্টেন্ট: `
.*?`)। - গ্রিডি কোয়ান্টিফায়ার "ওভারম্যাচ" করলে (যেমন `
.*` পুরো লাইন নিলে)। - পারফরম্যান্স: কিছু কেসে রিলাক্ট্যান্ট দ্রুত (ব্যাকট্র্যাকিং কম)।
সারসংক্ষেপ
রিলাক্ট্যান্ট কোয়ান্টিফায়ার (`*?`, `+?`, `??`, `{n}?`) ন্যূনতম ম্যাচ করে। এটি HTML/XML পার্সিং, ডিলিমিটেড টেক্সট এক্সট্রাকশন, এবং ওভারম্যাচিং রোধে অপরিহার্য। গ্রিডি কোয়ান্টিফায়ারের পরে শুধু `?` যোগ করলেই রিলাক্ট্যান্ট হয়।