\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()` ব্যবহার করুন আরও সেফটি।