রেজেক্স টেস্টার: আপনার নিজের টেক্সটের বিপরীতে প্যাটার্ন তৈরি ও ডিবাগ করুন
একটি রেগুলার এক্সপ্রেশন হলো টেক্সটের আকৃতি বর্ণনা করার একটি ক্ষুদ্র ভাষা। "এই ঠিক শব্দটি এখানে আছে কি?" জিজ্ঞাসা করার বদলে, একটি রেজেক্স আপনাকে জিজ্ঞাসা করতে দেয় "এমন একটি স্ট্রিং কি আছে যা এই রকম দেখতে?" এটিই কোড এডিটর, লগ ফাইল, ফর্ম ইনপুট, এবং স্ক্রিপ্টে টেক্সট খুঁজে বের করা, যাচাই করা, বের করে আনা, ও প্রতিস্থাপন করার জন্য এটিকে শক্তিশালী করে তোলে। এটিই একে ভুল করা সহজও করে তোলে, কারণ একটি প্যাটার্ন যা আপনার মাথায় ঠিক মনে হয় তা নীরবে খুব বেশি, খুব কম, বা কিছুই মেলাতে পারে না।
এই কারণেই ইন্টারঅ্যাক্টিভভাবে পরীক্ষা করা অনুমান করার চেয়ে ভালো। যখন আপনি একটি প্যাটার্ন টাইপ করেন ও প্রকৃত নমুনা টেক্সট জুড়ে মিলগুলো জ্বলে উঠতে দেখেন, আপনি তাৎক্ষণিক প্রতিক্রিয়া পান: আপনি দেখেন কী ধরা পড়েছে, কী ফসকে গেছে, এবং কোন ক্যাপচার গ্রুপ কোন অংশ ধরেছে। আমাদের রেজেক্স টেস্টার সম্পূর্ণভাবে আপনার ব্রাউজারে চলে। আপনার প্যাটার্ন ও আপনার নমুনা টেক্সট কখনো পাতা ছেড়ে যায় না, তাই আপনি একটি সার্ভারে কিছু না পাঠিয়ে লগ লাইন, ইমেইল, বা প্রোডাকশন ডেটা পেস্ট করতে পারেন।

জানার মতো বিল্ডিং ব্লকগুলো
বেশিরভাগ দৈনন্দিন প্যাটার্ন ছোট কয়েকটি টুকরো থেকে একত্রিত হয়। এগুলো শিখুন এবং আপনি বন্যতায় দেখা রেজেক্সের সংখ্যাগরিষ্ঠ অংশ পড়তে পারবেন।
ক্যারেক্টার ক্লাস অনুমোদিত অক্ষরের একটি সেট বর্ণনা করে। [aeiou] যেকোনো একটি স্বরবর্ণের সাথে মেলে, [0-9] একটি সংখ্যার সাথে মেলে, এবং [a-zA-Z] একটি অক্ষরের সাথে মেলে। ব্র্যাকেটের ভিতরে একটি ক্যারেট সেটটি নেগেট করে, তাই [^0-9] মানে "যেকোনো অক্ষর যা সংখ্যা নয়।" শর্টহ্যান্ড টাইপিং বাঁচায়: \d একটি সংখ্যা, \w একটি শব্দ অক্ষর (অক্ষর, সংখ্যা, আন্ডারস্কোর), \s হোয়াইটস্পেস, এবং ডট . প্রায় যেকোনো একক অক্ষরের সাথে মেলে।
কোয়ান্টিফায়ার বলে দেয় আগের টুকরোটি কতবার পুনরাবৃত্তি হতে পারে। * মানে শূন্য বা তার বেশি, + মানে এক বা তার বেশি, এবং ? মানে শূন্য বা এক (ঐচ্ছিক)। নির্দিষ্ট গণনার জন্য, {3} মানে ঠিক তিন এবং {2,4} মানে দুই থেকে চার। তাই \d{4} একটি চার-অঙ্কের বছরের সাথে মেলে এবং colou?r উভয় বানানের সাথে মেলে।
অ্যাঙ্কর একটি প্যাটার্নকে একটি অক্ষরের বদলে একটি অবস্থানে পিন করে। ^ টেক্সটের শুরুর সাথে মেলে, $ শেষের সাথে মেলে, এবং \b একটি শব্দ সীমানা চিহ্নিত করে। প্যাটার্ন ^Error শুধুমাত্র "Error" দিয়ে শুরু হওয়া লাইনের সাথে মেলে, যা লগ স্ক্যান করার সময় ঠিক যা আপনি চান।
গ্রুপ একটি প্যাটার্নের অংশ বন্ধনীতে মোড়ায়, একসাথে বেশ কয়েকটি অক্ষরে একটি কোয়ান্টিফায়ার প্রয়োগ করতে এবং পরে পুনরায় ব্যবহারের জন্য মিলিত টেক্সট ক্যাপচার করতে। (\d{4})-(\d{2})-(\d{2})-এ প্রতিটি গ্রুপ একটি তারিখ উপাদান ক্যাপচার করে যা আপনি পরে বের করতে পারেন। অল্টারনেশন পাইপ দিয়ে "অথবা"-এর মতো কাজ করে: cat|dog|fish তিনটি শব্দের যেকোনো একটির সাথে মেলে।
প্যাটার্ন যা আপনি প্রকৃতপক্ষে ব্যবহার করবেন
কয়েকটি পুনরাবৃত্ত কাজ বেশিরভাগ প্রকৃত কাজ কভার করে। ইমেইল-সদৃশ কিছু ধরতে, [\w.+-]+@[\w-]+\.[\w.-]+ একটি বাস্তবসম্মত শুরুর বিন্দু; আনুষ্ঠানিক স্পেক অনুসারে সম্পূর্ণ ইমেইল যাচাই বিখ্যাতভাবে জটিল, এবং ব্যবহারকারীদের প্রত্যাখ্যান করার বদলে প্রার্থী হাইলাইট করার জন্য একটি শিথিল প্যাটার্ন সাধারণত সঠিক পছন্দ।
সংখ্যার জন্য, \d+ সংখ্যার পরপর সিরিজ ধরে, যখন -?\d+(\.\d+)? ঐচ্ছিক নেগেটিভ ও দশমিকের সাথে মেলে। অগ্রণী ও পশ্চাদ্গামী হোয়াইটস্পেস কাটতে, ^\s+|\s+$ মিলিয়ে এটিকে কিছু দিয়ে প্রতিস্থাপন করুন না। ডুপ্লিকেট করা শব্দ খুঁজতে, ব্যাকরেফারেন্স প্যাটার্ন \b(\w+)\s+\1\b একটি শব্দের পর সেই শব্দটি নিজেই আসার সাথে মেলে, যেখানে \1 প্রথম ক্যাপচার করা গ্রুপকে নির্দেশ করে।

ফ্ল্যাগ মিলানোর আচরণ পরিবর্তন করে
ফ্ল্যাগ হলো সুইচ যা পুরো প্যাটার্ন পরিবর্তন করে। গ্লোবাল ফ্ল্যাগ (g) প্রথম মিলে থামার বদলে প্রতিটি মিল খুঁজে বের করে, যা আপনি চান যখন সব ঘটনা হাইলাইট করছেন। কেস-ইনসেনসিটিভ ফ্ল্যাগ (i) error-কে "Error" ও "ERROR"-এর সাথে একইভাবে মেলায়। মাল্টিলাইন ফ্ল্যাগ (m) ^ ও $ পরিবর্তন করে যাতে তারা শুধু সম্পূর্ণ টেক্সটের নয়, প্রতিটি লাইনের শুরু ও শেষে মেলে, যা লাইন-বাই-লাইন লগ কাজের জন্য অপরিহার্য। অন্যান্য দরকারী ফ্ল্যাগের মধ্যে আছে s (ডটঅল, ডটকে নিউলাইনের সাথে মেলানোর অনুমতি দেয়) এবং সম্পূর্ণ ইউনিকোড হ্যান্ডলিংয়ের জন্য u।
ভাষা অনুসারে ধরনগুলো সামান্য ভিন্ন
রেজেক্স একটি ডায়ালেক্টের পরিবার, একটি একক স্থির স্ট্যান্ডার্ড নয়। JavaScript, Python, PCRE (PHP), Java, .NET, Go, এবং Rust উপরের মূল সিনট্যাক্সে একমত, কিন্তু তারা প্রান্তে ভিন্ন হয়ে যায়: লুকবিহাইন্ড সমর্থন, নামযুক্ত-গ্রুপ সিনট্যাক্স ((?<name>...) বনাম (?P<name>...)), ইউনিকোড প্রপার্টি এস্কেপ, এবং কোন ফ্ল্যাগ বিদ্যমান তা সবই পরিবর্তিত হয়। একটি প্যাটার্ন যা একটি ইঞ্জিনে কাজ করে অন্যটিতে সামান্য পরিবর্তন প্রয়োজন হতে পারে, তাই আপনি যে ধরন দিয়ে প্রকৃতপক্ষে শিপ করেন তার বিপরীতে পরীক্ষা করা লাভজনক। আপনি যখন একটি প্যাটার্ন ঠিক করে ফেলেছেন, আমাদের অন্যান্য ডেভেলপার টুল ও টেক্সট টুল আপনার এইমাত্র মেলানো ডেটা পরিষ্কার, এনকোড, ও রূপান্তর করার আশেপাশের কাজে সাহায্য করতে পারে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
আমার টেক্সট কি একটি সার্ভারে পাঠানো হয়?
না। রেজেক্স টেস্টার সম্পূর্ণভাবে আপনার ব্রাউজারে চলে। আপনার প্যাটার্ন ও নমুনা টেক্সট আপনার ডিভাইসেই থাকে এবং কখনো আপলোড হয় না, তাই সংবেদনশীল ডেটা পেস্ট করা নিরাপদ।
এই টুলটি কোন রেজেক্স ধরন ব্যবহার করে?
এটি আপনার ব্রাউজারে তৈরি JavaScript রেজেক্স ইঞ্জিন ব্যবহার করে। মূল সিনট্যাক্স আপনি বেশিরভাগ ভাষা থেকে যা জানেন তার সাথে মেলে, যদিও কিছু উন্নত বৈশিষ্ট্য PCRE, Python, বা .NET থেকে সামান্য ভিন্ন।
গ্রিডি ও লেজি ম্যাচিংয়ের মধ্যে পার্থক্য কী?
ডিফল্টভাবে কোয়ান্টিফায়ার গ্রিডি এবং যতটা সম্ভব বেশি টেক্সট ধরে। একটি প্রশ্নবোধক চিহ্ন যোগ করলে তারা লেজি হয়ে যায়, তাই তারা যতটা সম্ভব কম ধরে। উদাহরণস্বরূপ, একটি ডট স্টার প্যাটার্ন গ্রিডি যেখানে একটি ডট স্টার প্রশ্নবোধক চিহ্ন প্যাটার্ন লেজি।
আমি কীভাবে একটি আক্ষরিক বিশেষ অক্ষর মেলাবো?
একটি ব্যাকস্ল্যাশ দিয়ে এটি এস্কেপ করুন। একটি প্রকৃত ডট মেলাতে, ব্যাকস্ল্যাশ ডট লিখুন। একই কথা প্রযোজ্য অন্যান্য মেটা অক্ষরের জন্য যেমন বন্ধনী, ব্র্যাকেট, প্লাস চিহ্ন, ও প্রশ্নবোধক চিহ্ন।
আমার প্যাটার্ন কেন কিছুই মেলাচ্ছে না?
সাধারণ কারণগুলো হলো একটি অনুপস্থিত গ্লোবাল ফ্ল্যাগ, অ্যাঙ্কর যা মিলকে ভুল অবস্থানে পিন করে, একটি আনএস্কেপড বিশেষ অক্ষর, বা গ্রিডি কোয়ান্টিফায়ার আপনার প্রত্যাশিত সীমানা ছাড়িয়ে যাওয়া। দোষী খুঁজতে টুকরো টুকরো করে পরীক্ষা করুন।
আমি কি মিলের অংশ ক্যাপচার করতে পারি?
হ্যাঁ। প্যাটার্নের একটি অংশ বন্ধনীতে মোড়ান একটি ক্যাপচার গ্রুপ তৈরি করতে। প্রতিটি গ্রুপ আলাদাভাবে রিপোর্ট করা হয়, যা আপনাকে একটি তারিখ থেকে বছর, মাস, ও দিনের মতো ফিল্ড বের করতে দেয়।
