Regex টেস্টার
একটি প্যাটার্ন লিখুন, দরকারি ফ্ল্যাগগুলোতে টিক দিন এবং কিছু টেক্সট পেস্ট করুন: লেখার সঙ্গে সঙ্গেই প্রতিটি ম্যাচ হাইলাইট হয় এবং তার অবস্থান ও ক্যাপচার গ্রুপসহ তালিকায় দেখানো হয়। প্যাটার্নটি আপনার ব্রাউজারের নিজস্ব JavaScript regex ইঞ্জিনে চলে, তাই ফলাফল আপনার কোডের সঙ্গে মিলে যায় এবং টেক্সট আপনার ডিভাইসেই থাকে।
০টি অক্ষর · ০টি শব্দ · ০টি লাইন
ম্যাচগুলো এখানে হাইলাইট হবে।০টি অক্ষর · ০টি শব্দ · ০টি লাইন
সম্পূর্ণভাবে এই ব্রাউজার ট্যাবেই চলে। আপনার টেক্সট কখনও আপলোড বা সংরক্ষণ করা হয় না।
JavaScript regex টোকেন
প্রথম ম্যাচের কলামটি এই পেজ তৈরিকারী JavaScript ইঞ্জিনে প্রতিটি প্যাটার্ন তার টেক্সটে চালিয়ে পাওয়া।
| টোকেন | অর্থ | প্যাটার্ন | টেক্সট | প্রথম ম্যাচ |
|---|---|---|---|---|
\d | অঙ্ক 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | অক্ষর, অঙ্ক বা আন্ডারস্কোর (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | ফাঁকা স্থান, ট্যাব ও লাইন ব্রেকসহ | /\s+/ | two spaces | |
. | লাইন ব্রেক ছাড়া যেকোনো অক্ষর (s থাকলে ছাড়া নয়) | /a.c/ | abc a-c | abc |
^ $ | ইনপুটের (বা m থাকলে লাইনের) শুরু ও শেষ | /^\w+$/ | single | single |
[abc] | তালিকার যেকোনো একটি অক্ষর | /[aeiou]/ | rhythm and blues | a |
[^abc] | তালিকায় নেই এমন যেকোনো অক্ষর | /[^0-9]+/ | 2026-10-18 | - |
* + ? | ০ বা বেশি, ১ বা বেশি, ০ বা ১ | /colou?r/ | color colour | color |
{n,m} | n থেকে m বার | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | ক্যাপচারিং গ্রুপ | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | নামযুক্ত ক্যাপচারিং গ্রুপ | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | ক্যাপচার ছাড়া গ্রুপ | /(?:ab)+/ | ababab! | ababab |
a|b | যেকোনো একপাশ | /cat|dog/ | hotdog | dog |
\b | শব্দের সীমানা | /\bcat\b/ | concat cat | cat |
(?=…) | এর পরে আছে (লুকঅ্যাহেড) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | এর আগে নেই (নেগেটিভ লুকবিহাইন্ড) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | যেকোনো Unicode অক্ষর (u লাগবে) | /\p{L}+/u | naïve 東京 | naïve |
ছয়টি ফ্ল্যাগ এবং সেগুলো কী বদলায়
g (গ্লোবাল) প্রথম ম্যাচে থেমে না গিয়ে সব ম্যাচ খুঁজে বের করে; এটি ছাড়া তালিকায় একটিমাত্র এন্ট্রি থাকে। i বড় হাতের ও ছোট হাতের অক্ষরের পার্থক্য উপেক্ষা করে। m (মাল্টিলাইন) ^ ও $ কে পুরো টেক্সটের শুরু ও শেষের বদলে প্রতিটি লাইনের শুরু ও শেষে মেলায়; লাইনের শেষের বাড়তি স্পেসের মতো প্যাটার্নের জন্য এটিই দরকার। s (dotAll, ES2018-এ যুক্ত) . কে লাইন ব্রেকের সঙ্গেও মেলাতে দেয়। u (ইউনিকোড) টেক্সটকে কোড পয়েন্ট হিসেবে ধরে, তাই একটি ইমোজি একটি অক্ষর গণ্য হয়, এবং যেকোনো ভাষার যেকোনো অক্ষরের জন্য \p{L}-এর মতো প্রপার্টি এস্কেপ চালু করে। y (স্টিকি) শুধু বর্তমান অবস্থানেই হুবহু মেলায়, টোকেনাইজাররা এই মোড ব্যবহার করে। JavaScript-এ ম্যাচ ইনডেক্সের জন্য d এবং ক্লাসে সেট অপারেশনের জন্য v-ও আছে; এই টেস্টার উপরের ছয়টিতেই সীমাবদ্ধ।
টেস্ট টেক্সটের নিচে প্রতিটি ম্যাচের ইনডেক্স ও গ্রুপ দেখানো হয়। সাধারণ বন্ধনী থেকে নম্বরযুক্ত গ্রুপ তৈরি হয়, (?:…) ক্যাপচার ছাড়াই গ্রুপ করে, আর (?<year>\d{4}) একটি নামযুক্ত গ্রুপ তৈরি করে যা নাম ধরেই দেখা যায়, যেমন ISO তারিখের নমুনায় দেখানো হয়েছে। Common patterns মেনু ইমেইল ঠিকানা, URL, IPv4 ঠিকানা, হেক্স রং, UUID, পুনরাবৃত্ত শব্দ ও লাইনের শেষের বাড়তি স্পেসের জন্য পরীক্ষিত শুরুর প্যাটার্ন বসিয়ে দেয়। ইমেইল প্যাটার্নটিকে যাচাইকরণ নয়, বরং মোটামুটি পরীক্ষা হিসেবে দেখুন: পূর্ণ ঠিকানার ব্যাকরণ অনেক বেশি উদার, আর আসল পরীক্ষা হলো বার্তা পাঠিয়ে দেখা।
লুকবিহাইন্ড ও ক্যাটাস্ট্রফিক ব্যাকট্র্যাকিং
লুকঅ্যারাউন্ড কোনো অবস্থান ছাড়াই তার চারপাশ পরীক্ষা করে, অবস্থানটি গ্রাস করে না। লুকঅ্যাহেড, (?=…) ও (?!…), JavaScript-এ বরাবরই ছিল; লুকবিহাইন্ড, (?<=…) ও (?<!…), ES2018-এ এসেছে এবং ২০২৩ সালে Safari 16.4 এটি যোগ করার পর সব প্রধান ব্রাউজারে পৌঁছেছে। তাই (?<=\$)\d+ "$42" থেকে ডলার চিহ্ন ছাড়াই 42 খুঁজে পায়। অন্য অনেক ইঞ্জিনের মতো নয়, JavaScript যেকোনো দৈর্ঘ্যের লুকবিহাইন্ড অনুমোদন করে।
JavaScript ইঞ্জিন ব্যাকট্র্যাকিং পদ্ধতিতে চলে: কোনো পথ ব্যর্থ হলে সে ফিরে গিয়ে বিকল্পগুলো চেষ্টা করে। (a+)+$-এর মতো নেস্টেড কোয়ান্টিফায়ার একই টেক্সটকে ভাগ করার ঘাতশীল সংখ্যক উপায় তৈরি করে, তাই ৩০টি a-এর পরে একটি x থাকলে কয়েক সেকেন্ড লাগতে পারে, আর আরও কয়েকটি অক্ষরে কয়েক ঘণ্টা। একে বলে ক্যাটাস্ট্রফিক ব্যাকট্র্যাকিং, আর সার্ভারে এটি ReDoS, অর্থাৎ ডিনায়াল অব সার্ভিস হয়ে দাঁড়ায়; এই ত্রুটিযুক্ত একটি WAF রুল ২০১৯ সালের ২ জুলাই Cloudflare-এর নেটওয়ার্ক প্রায় আধা ঘণ্টা বন্ধ করে দিয়েছিল। এই টেস্টার আপনার ট্যাবেই চলে বলে এমন প্যাটার্ন পেজ আটকে দিতে পারে; রিলোড করুন এবং প্যাটার্ন এমনভাবে নতুন করে লিখুন যাতে দুটি কোয়ান্টিফায়ার একই অক্ষর দাবি করতে না পারে, .*-এর বদলে [^,]*-এর মতো আঁটসাঁট ক্লাস বা অ্যাংকর ব্যবহার করুন। টেক্সট মেলানোর বদলে সম্পাদনার জন্য টেক্সট টুল দেখুন; আরও ডেভেলপার ইউটিলিটি আছে ডেভেলপার টুল হাবে।
সচরাচর জিজ্ঞাসা
- আমার regex কেন মাত্র একটি ম্যাচ খুঁজে পায়?
- g ফ্ল্যাগ বন্ধ আছে। এটি ছাড়া ইঞ্জিন প্রথম ম্যাচের পরেই থেমে যায়। প্রতিটি ম্যাচ দেখতে g টিক দিন; শুধু y ফ্ল্যাগেও একাধিক ম্যাচ মেলে, তবে কেবল যখন সেগুলো একটার পরে একটা সরাসরি আসে।
- JavaScript-এ \d কি অন্য লিপির সংখ্যাও ম্যাচ করে?
- না। JavaScript-এ \d মানে শুধু 0 থেকে 9 এবং \w মানে শুধু ASCII অক্ষর, অঙ্ক ও আন্ডারস্কোর, u ফ্ল্যাগ থাকলেও। অন্য লিপির জন্য u-সহ \p{Nd} বা \p{L} ব্যবহার করুন।
- এখানে টেস্ট করা প্যাটার্ন কি Python বা PHP-তেও একইভাবে কাজ করবে?
- মৌলিক সিনট্যাক্স একই থাকে, তবে খুঁটিনাটিতে পার্থক্য আছে: Python-এ নামযুক্ত গ্রুপ লিখতে হয়
(?P<name>…), PHP ও Python পজেসিভ কোয়ান্টিফায়ার সমর্থন করে যা JavaScript-এ নেই, আর লুকবিহাইন্ডের নিয়মও আলাদা। লক্ষ্য ইঞ্জিনে আবার পরীক্ষা করুন। - আক্ষরিক ডট বা ব্র্যাকেট কীভাবে ম্যাচ করব?
- ব্যাকস্ল্যাশ দিয়ে এস্কেপ করুন:
\.একটি ডট মেলায় এবং\[একটি খোলা বন্ধনী। ক্যারেক্টার ক্লাসের ভেতরে বেশিরভাগ চিহ্ন এমনিতেই আক্ষরিক, তাই[.]-ও শুধু ডট মেলায়। - প্যাটার্ন লেখার সময় পেজটি কেন আটকে গেল?
- সম্ভবত প্যাটার্নটি আপনার টেক্সটে ক্যাটাস্ট্রফিক ব্যাকট্র্যাকিং ঘটিয়েছে। রিলোড করুন, তারপর
(.*)*বা(a+)+-এর মতো নেস্টেড কোয়ান্টিফায়ার এড়িয়ে প্রতিটি অংশকে যতটা সম্ভব কম মেলাতে বলুন।