কম্পিউটার টিউটোরিয়াল

জাভা রেগুলার এক্সপ্রেশন: রিলাক্ট্যান্ট (নন-গ্রিডি) কোয়ান্টিফায়ার


রিলাক্ট্যান্ট কোয়ান্টিফায়ার কী?

গ্রিডি কোয়ান্টিফায়ার (ডিফল্ট) যতটুকু সম্ভব বেশি ম্যাচ করতে চায়। রিলাক্ট্যান্ট (নন-গ্রিডি) কোয়ান্টিফায়ার যতটুকু সম্ভব কম ম্যাচ করে — প্রথমে শূন্য/এক ক্যারেক্টার ম্যাচ করে, দরকার पड़লে বড়ায়। গ্রিডি কোয়ান্টিফায়ারের পরে `?` দিয়ে রিলাক্ট্যান্ট বানানো হয়।

রিলাক্ট্যান্ট কোয়ান্টিফায়ার তালিকা

কোয়ান্টিফায়ারব্যাখ্যা
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 পার্সিং, ডিলিমিটেড টেক্সট এক্সট্রাকশন, এবং ওভারম্যাচিং রোধে অপরিহার্য। গ্রিডি কোয়ান্টিফায়ারের পরে শুধু `?` যোগ করলেই রিলাক্ট্যান্ট হয়।

  1. জাভা রেগুলার এক্সপ্রেশনে \E মেটাক্যারেক্টার

  2. জাভা রেগুলার এক্সপ্রেশনে PatternSyntaxException ক্লাস

  3. জাভা রেগুলার এক্সপ্রেশনে (?> re) সাব-এক্সপ্রেশন ব্যাখ্যা

  4. জাভাতে রেগুলার এক্সপ্রেশন ব্যবহার করে স্ট্রিং থেকে নম্বর বের করা