মানুষের জন্য রেগুলার এক্সপ্রেশন: একটি ব্যবহারিক গাইড
রেগুলার এক্সপ্রেশন (regex)-এর সুনাম সমস্যা আছে। এগুলো দেখে মনে হয় কেউ কীবোর্ডে ঘুমিয়ে পড়েছে: ^[\w.-]+@[\w-]+\.[\w.]+$। এগুলো কোড রিভিউ, টেক্সট এডিটর, সার্চ টুল এবং ফর্ম ভ্যালিডেশনে দেখা যায়। ডেভেলপাররা হয় এগুলো পছন্দ করে নয়তো পুরোপুরি এড়িয়ে চলে।
সত্য দুইয়ের মাঝখানে। Regex সত্যিই শক্তিশালী। প্রথমে সত্যিই বিভ্রান্তিকরও। কিন্তু ব্যবহারিক মান পেতে প্রতিটি অস্পষ্ট ফিচার মাস্টার করার দরকার নেই। মুষ্টিমেয় কিছু প্যাটার্ন বাস্তব জীবনের বিশাল সংখ্যাগরিষ্ঠ ব্যবহারের ক্ষেত্র কভার করে।
Regex আসলে কী করে
রেগুলার এক্সপ্রেশন হলো একটি প্যাটার্ন যা স্ট্রিংয়ের সেট বর্ণনা করে। আপনি এটি সার্চ টুলকে দেন, এবং এটি প্যাটার্নের সাথে মেলে এমন প্রতিটি স্ট্রিং খুঁজে বের করে। এটিকে একটি অত্যন্ত সুনির্দিষ্ট সার্চ কোয়েরি মনে করুন।
সাধারণ সার্চ: ঠিক "hello" খুঁজুন Regex সার্চ: ইমেইল ঠিকানা, ফোন নম্বর, তারিখ, URL বা আপনি বর্ণনা করতে পারেন এমন যেকোনো প্যাটার্নের মতো দেখায় এমন কিছু খুঁজুন।
আপনি কি জানতেন? রেগুলার এক্সপ্রেশন ১৯৫৬ সালে গণিতবিদ Stephen Kleene আনুষ্ঠানিক ভাষা তত্ত্বে "রেগুলার ভাষা" বর্ণনার জন্য একটি চিহ্ন হিসেবে আবিষ্কার করেছিলেন। ১৯৬০ এবং ১৯৭০-এর দশকে প্রাথমিক Unix টেক্সট এডিটরের মাধ্যমে এগুলো কম্পিউটিংয়ে প্রবেশ করে।
গঠনকারী উপাদান
আক্ষরিক অক্ষর
সবচেয়ে সাধারণ regex হলো শুধু আক্ষরিক টেক্সট। hello প্যাটার্ন "hello" স্ট্রিংয়ের সাথে মেলে। বিশেষ কিছু নয়।
ডট (.) — যেকোনো একক অক্ষর
একটি ডট যেকোনো একক অক্ষরের সাথে মেলে (নিউলাইন ছাড়া)।
h.t"hat," "hit," "hot," "hut," এমনকি "h3t"-এর সাথে মেলে
ক্যারেক্টার ক্লাস ([]) — নির্দিষ্ট অক্ষর
স্কয়ার ব্র্যাকেট সেই অবস্থানে অনুমোদিত অক্ষরের সেট নির্ধারণ করে।
[aeiou]যেকোনো একক স্বরবর্ণের সাথে মেলে[0-9]যেকোনো সংখ্যার সাথে মেলে[A-Za-z]যেকোনো অক্ষরের (বড় বা ছোট হাতের) সাথে মেলে[^0-9]যেকোনো অক্ষরের সাথে মেলে যা সংখ্যা নয় (ব্র্যাকেটের ভিতরে^মানে "নয়")
কোয়ান্টিফায়ার — কতবার
এই চিহ্নগুলো পুনরাবৃত্তি নিয়ন্ত্রণ করে:
| চিহ্ন | অর্থ | উদাহরণ | মেলে |
|---|---|---|---|
* |
শূন্য বা তার বেশি | ab*c |
"ac," "abc," "abbc," "abbbc" |
+ |
এক বা তার বেশি | ab+c |
"abc," "abbc," "abbbc" ("ac" নয়) |
? |
শূন্য বা এক | colou?r |
"color" এবং "colour" |
{3} |
ঠিক ৩ | a{3} |
"aaa" |
{2,4} |
২ থেকে ৪ | a{2,4} |
"aa," "aaa," "aaaa" |
অ্যাংকর — অবস্থান
- শুরুতে
^মানে "স্ট্রিংয়ের শুরু" - শেষে
$মানে "স্ট্রিংয়ের শেষ" ^hello$শুধু ঠিক "hello" স্ট্রিংয়ের সাথে মেলে, "say hello" বা "hello world" নয়
শর্টহ্যান্ড ক্লাস
সাধারণ ক্যারেক্টার ক্লাসের শর্টকাট আছে:
| শর্টহ্যান্ড | সমতুল্য | অর্থ |
|---|---|---|
\d |
[0-9] |
যেকোনো সংখ্যা |
\w |
[A-Za-z0-9_] |
যেকোনো "শব্দ" অক্ষর |
\s |
[ \t\n\r] |
যেকোনো হোয়াইটস্পেস |
\D |
[^0-9] |
যেকোনো অ-সংখ্যা |
\W |
[^A-Za-z0-9_] |
যেকোনো অ-শব্দ অক্ষর |
\S |
[^ \t\n\r] |
যেকোনো অ-হোয়াইটস্পেস |
গ্রুপ (()) — গ্রুপিং ও ক্যাপচারিং
প্যারেন্থেসিস প্যাটার্নের অংশ গ্রুপ করে। গ্রুপে কোয়ান্টিফায়ার প্রয়োগ করতে বা ম্যাচের নির্দিষ্ট অংশ বের করতে এটি কার্যকর।
(ab)+"ab," "abab," "ababab"-এর সাথে মেলে(\d{3})-(\d{4})"555-1234"-এর সাথে মেলে এবং "555" ও "1234" আলাদাভাবে ক্যাপচার করে
পাইপ (|) — অথবা
পাইপ মানে "অথবা।"
cat|dog"cat" বা "dog"-এর সাথে মেলে(jpg|png|gif)এই তিনটি ইমেজ এক্সটেনশনের যেকোনোটির সাথে মেলে
আজই ব্যবহার করতে পারেন এমন ব্যবহারিক প্যাটার্ন
ইমেইল ঠিকানা মেলান (সরল)
[\w.-]+@[\w-]+\.[\w.]+
বিশ্লেষণ:
[\w.-]+— এক বা একাধিক শব্দ অক্ষর, ডট বা হাইফেন (লোকাল পার্ট)@— আক্ষরিক @ চিহ্ন[\w-]+— এক বা একাধিক শব্দ অক্ষর বা হাইফেন (ডোমেইন)\.— আক্ষরিক ডট (এস্কেপ করা কারণ.বিশেষ অক্ষর)[\w.]+— এক বা একাধিক শব্দ অক্ষর বা ডট (TLD)
সতর্কতা Regex দিয়ে ইমেইল ভ্যালিডেশন পুরোপুরি সঠিকভাবে করা কুখ্যাতভাবে কঠিন। উপরের সরল প্যাটার্ন ৯৯% বাস্তব ইমেইল ঠিকানা কভার করে কিন্তু RFC স্পেসিফিকেশনে সংজ্ঞায়িত প্রতিটি এজ কেস পরিচালনা করে না। প্রোডাকশন ভ্যালিডেশনের জন্য, আপনার প্রোগ্রামিং ভাষার ইমেইল ভ্যালিডেশন লাইব্রেরি ব্যবহার করুন।
ফোন নম্বর মেলান (US ফরম্যাট)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
এটি মেলে:
- (555) 123-4567
- 555-123-4567
- 555.123.4567
- 555 123 4567
URL মেলান
https?://[\w.-]+(/[\w./-]*)?
এটি মেলে:
তারিখ মেলান (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
এটি মেলে: 2026-03-23, 1999-12-31, ইত্যাদি।
পুনরাবৃত্ত শব্দ খুঁজুন
\b(\w+)\s+\1\b
এটি "the the" বা "is is"-এর মতো পুনরাবৃত্ত শব্দের সাথে মেলে। \1 প্রথম গ্রুপ যা ক্যাপচার করেছে তা রেফার করে।
IPv4 ঠিকানা মেলান
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
এটি 192.168.1.1 বা 10.0.0.255-এর মতো প্যাটার্নের সাথে মেলে।
Regex লেখার পরামর্শ
১. সহজ শুরু করুন, তারপর পরিমার্জন করুন
প্রথম চেষ্টায় নিখুঁত regex লেখার চেষ্টা করবেন না। একটি বিস্তৃত প্যাটার্ন দিয়ে শুরু করুন, আপনার ডেটা দিয়ে পরীক্ষা করুন, এবং শক্ত করুন।
২. সর্বদা পরীক্ষা করুন
Regex ভুল হওয়া সহজ। একটি অনুপস্থিত কোয়ান্টিফায়ার বা আনএস্কেপড ডট কী মেলে তা সম্পূর্ণ পরিবর্তন করতে পারে। প্রোডাকশনে ব্যবহারের আগে সর্বদা বাস্তব ডেটা দিয়ে পরীক্ষা করুন।
৩. বিশেষ অক্ষর এস্কেপ করুন
আক্ষরিক ডট, প্যারেন্থেসিস, ব্র্যাকেট বা অন্যান্য বিশেষ অক্ষর মেলাতে হলে, ব্যাকস্ল্যাশ দিয়ে এস্কেপ করুন: \., \(, \[।
৪. কমেন্ট ও নামযুক্ত গ্রুপ ব্যবহার করুন
জটিল প্যাটার্নে, নামযুক্ত গ্রুপ ও কমেন্ট (যেখানে সমর্থিত) ব্যবহার করে regex পাঠযোগ্য করুন। ভবিষ্যতে আপনি নিজেকে ধন্যবাদ দেবেন।
৫. কখন Regex ব্যবহার করবেন না জানুন
Regex HTML, XML, JSON বা যেকোনো নেস্টেড কাঠামো পার্স করার জন্য ভুল টুল। এগুলোর জন্য সঠিক পার্সার ব্যবহার করুন।
পরামর্শ রিয়েল টাইমে আপনার regex প্যাটার্ন পরীক্ষা ও ডিবাগ করুন: কীভাবে Regex প্যাটার্ন পরীক্ষা করবেন। আপনার প্যাটার্ন ও পরীক্ষার ডেটা পেস্ট করুন, এবং তাৎক্ষণিকভাবে হাইলাইট করা ম্যাচ দেখুন।
এখনই regex পরীক্ষা শুরু করুন:
বিনামূল্যে, তাৎক্ষণিক ফিডব্যাক, এবং কোনো সাইন-আপ লাগবে না।