ক্যারেক্টার ক্লাসের পাঁচটি ভ্যারিয়েন্ট
জাভা রেগেক্সে ক্যারেক্টার ক্লাস `[ ]` এর পাঁচটি মূল ভ্যারিয়েন্ট রয়েছে:
১. সিম্পল / বেসিক
[abc] — 'a', 'b', বা 'c' যেকোনো একটি।
[a-z] — রেঞ্জ: a থেকে z।
২. নিগেশন (Negation) — [^...]
ক্যারেক্টার ক্লাসের শুরুতে `^` দিয়ে নির্দিষ্ট সেট বাড়তি সব ক্যারেক্টার ম্যাচ করা হয়।
[^abc]— 'a', 'b', 'c' ছাড়া যেকোনো ক্যারেক্টার[^a-z]— ছোট হাতের অক্ষর ছাড়া যেকোনো ক্যারেক্টার
৩. রেঞ্জ (Range) — [a-z]
হাইফন `-` দিয়ে ক্রমাগত ক্যারেক্টার রেঞ্জ স্পেসিফাই করা হয়।
[a-z]— ছোট হাতের অক্ষর[A-Z]— বড় হাতের অক্ষর[0-9]— ডিজিট[^A-Z]— বড় হাতের অক্ষর ছাড়া (নিগেশন + রেঞ্জ কম্বাইন)
৪. ইউনিয়ন (Union) — [range1[range2]]
নেস্টেড ব্র্যাকেটস দিয়ে একাধিক রেঞ্জের যুনিয়ন (OR) করা হয়।
[a-z[0-9]]— ছোট হাতের অক্ষর অথবা ডিজিট[A-Z[a-f]]— বড় হাতের অক্ষর অথবা a-f
৫. ইন্টারসেকশন (Intersection) — [range1&&range2]
ডাবল অ্যাম্পারস্যান্ড `&&` দিয়ে দুটি রেঞ্জের কমন (AND) পার্ট নেওয়া হয়।
[a-z&&[r-u]]— r থেকে u পর্যন্ত ছোট হাতের অক্ষর (a-z এবং r-u-এর ইন্টারসেকশন)[0-9&&[4-7]]— 4, 5, 6, 7
৬. সাবট্র্যাকশন (Subtraction) — নিগেশন + ইন্টারসেকশন
এক রেঞ্জ থেকে অন্য রেঞ্জ বিয়োগ করার কোনো ডাইরেক্ট সিনট্যাক্স নেই। নিগেশন এবং ইন্টারসেকশন কম্বাইন করে করা যায়:
[a-l&&[^e-h]]— a থেকে l পর্যন্ত, কিন্তু e-h বাদ। ফলাফল: a, b, c, d, i, j, k, l
সারসংক্ষেপ টেবিল
| ভ্যারিয়েন্ট | সিনট্যাক্স | উদাহরণ | অর্থ |
|---|---|---|---|
| বেসিক | [abc] | [abc] | a, b, বা c |
| নিগেশন | [^...] | [^abc] | a, b, c ছাড়া সব |
| রেঞ্জ | [a-z] | [a-z] | a থেকে z |
| ইউনিয়ন | [r1[r2]] | [a-z[0-9]] | a-z অথবা 0-9 |
| ইন্টারসেকশন | [r1&&r2] | [a-z&&[m-p]] | m, n, o, p |
| সাবট্র্যাকশন | [r1&&[^r2]] | [a-f&&[^c-e]] | a, b, f |
সারসংক্ষেপ
ক্যারেক্টার ক্লাসের এই পাঁচটি ভ্যারিয়েন্ট (বেসিক, নিগেশন, রেঞ্জ, ইউনিয়ন, ইন্টারসেকশন/সাবট্র্যাকশন) কম্বাইন করে যেকোনো জটিল ক্যারেক্টার সেট ডিফাইন করা যায়। এগুলো মাস্টার করলে রেগেক্স লেখা অনেক সহজ ও এক্সপ্রেসিভ হয়।