ক্যারেক্টার ক্লাস ও ইউনিয়ন কী?
জাভা রেগুলার এক্সপ্রেশনে ক্যারেক্টার ক্লাস `[ ]` দিয়ে ডিফাইন করা হয়। এটি নির্দিষ্ট সেট থেকে একটি একক ক্যারেক্টার ম্যাচ করে। যেমন [abc] — 'a', 'b' বা 'c' যেকোনো একটি ম্যাচ করবে।
ইউনিয়ন (Union) ভ্যারিয়েন্ট আপনাকে একাধিক রেঞ্জ থেকে ক্যারেক্টার ম্যাচ করতে দেয়। সিনট্যাক্স: [range1[range2]]। উদাহরণস্বরূপ, [a-z[0-9]] মানে — ছোট হাতের অক্ষর (a-z) অথবা সংখ্যা (0-9) যেকোনো একটি।
কোড উদাহরণ
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexUnionExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
String input = sc.nextLine();
// ইউনিয়ন রেজেক্স: ছোট হাতের অক্ষর বা ডিজিট
String regex = "[a-z[0-9]]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("(a-z বা 0-9) রেঞ্জ থেকে ক্যারেক্টার সংখ্যা: " + count);
}
}
আউটপুট উদাহরণ
ইনপুট টেক্সট লিখুন: sample DATA 12345
(a-z বা 0-9) রেঞ্জ থেকে ক্যারেক্টার সংখ্যা: 11
ব্যাখ্যা: "sample" (6 ক্যারেক্টার) + "12345" (5 ডিজিট) = ১১। বড় হাতের "DATA" গণনা হয়নি।
অন্যান্য ইউনিয়ন উদাহরণ
| রেজেক্স | অর্থ | ম্যাচ করবে |
|---|---|---|
[a-f[x-z]] | a-f বা x-z | a,b,c,d,e,f,x,y,z |
[A-Z[a-z]] | বড় হাত বা ছোট হাত অক্ষর | সব ইংরেজি অক্ষর |
[0-9[aeiou]] | ডিজিট বা স্বরবর্ণ | 0-9, a, e, i, o, u |
মনে রাখার বিষয়
- ইউনিয়ন শুধু ক্যারেক্টার ক্লাসের ভিতরে কাজ করে।
- নেস্টেড ব্র্যাকেটস `
[[]]` ইউনিয়ন নির্দেশ করে। - ইন্টারসেকশন (`&&`) এবং সাবট্র্যাকশন (`[^...]`) থেকে আলাদা।
সারসংক্ষেপ
ক্যারেক্টার ক্লাসের ইউনিয়ন ফিচার আপনাকে একাধিক ক্যারেক্টার রেঞ্জ একসাথে স্পেসিফাই করতে দেয়, যা রেজেক্সকে সংক্ষিপ্ত এবং পঠনীয় করে তোলে। [a-z[0-9]] এর মত এক্সপ্রেশন লেখা `[a-z0-9]` লেখার চেয়ে বেশি স্পষ্টভাবে অভিপ্রায় প্রকাশ করে।