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

জাভা রেগুলার এক্সপ্রেশন: \Q মেটাক্যারেক্টার (কোটিং শুরু)


\Q এবং \E মেটাক্যারেক্টার

\Q এবং `\E` রেগেক্সে কোটিং (quoting) শুরু এবং শেষ নির্দেশ করে। `\Q` থেকে `\E` পর্যন্ত সব ক্যারেক্টার লিটারেল হিসেবে ট്രീট হয় — তাদের স্পেশাল মেনিং হারায়।

উদাহরণ ১: সাধারণ ক্যারেক্টার ক্লাস [aeiou]

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class QuoteQExample1 {
    public static void main(String[] args) {
        String regex = "[aeiou]"; // স্বরবর্ণ ম্যাচ
        Scanner sc = new Scanner(System.in);
        System.out.println("ইনপুট স্ট্রিং লিখুন: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("ম্যাচ হয়েছে");
        } else {
            System.out.println("ম্যাচ হয়নি");
        }
    }
}

আউটপুট উদাহরণ ১

ইনপুট স্ট্রিং লিখুন: sample
ম্যাচ হয়েছে

উদাহরণ ২: \Q...\E দিয়ে লিটারেল ম্যাচ

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class QuoteQExample2 {
    public static void main(String[] args) {
        // \Q[aeiou]\E -> লিটারেল "[aeiou]" স্ট্রিং ম্যাচ
        String regex = "\\Q[aeiou]\\E";
        Scanner sc = new Scanner(System.in);
        System.out.println("ইনপুট স্ট্রিং লিখুন: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("ম্যাচ হয়েছে");
        } else {
            System.out.println("ম্যাচ হয়নি");
        }
    }
}

আউটপুট উদাহরণ ২

ইনপুট স্ট্রিং লিখুন: sample
ম্যাচ হয়নি

ইনপুট স্ট্রিং লিখুন: The letters [aeiou] are vowels in English alphabet
ম্যাচ হয়েছে

Pattern.quote() মেথড (জাভা ৫+)

জাভা `Pattern.quote(String)` মেথড স্বয়ংক্রিয়ভাবে `\Q` এবং `\E` যোগ করে দেয়:

String literal = "[aeiou]";
String regex = Pattern.quote(literal); // আউটপুট: \Q[aeiou]\E
// ব্যবহার:
Pattern pattern = Pattern.compile(Pattern.quote(userInput));

এটি ইউজার ইনপুট রেজেক্স হিসেবে ব্যবহার করার সময় খুব উপকারী (রেজেক্স ইনজেকশন প্রিভেনশন)।

সারসংক্ষেপ

`\Q...\E` রেগেক্স মেটাক্যারেক্টারকে লিটারেল ক্যারেক্টার হিসেবে ট്രീট করতে বাধ্য করে। ডাইনামিক রেজেক্স বিল্ডিং, ইউজার ইনপুট স্যানিটাইজেশন, এবং লিটারেল স্ট্রিং ম্যাচিং-এ এটি অপরিহার্য। জাভায় `Pattern.quote()` ব্যবহার করুন আরও সেফটি।

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

  2. জাভা রেগুলার এক্সপ্রেশনে \A মেটাক্যারেক্টার ব্যাখ্যা

  3. জাভা রেগুলার এক্সপ্রেশনে $ (ডলার) মেটাক্যারেক্টার ব্যাখ্যা

  4. জাভা রেগুলার এক্সপ্রেশনে ^ (ক্যারেরট) মেটাক্যারেক্টার ব্যাখ্যা