বেশিরভাগ প্রোগ্রামারের একটি অন্ধস্থান (blind spot) আছে। তারা সানন্দে একটি ডিস্ট্রিবিউটেড সিস্টেম ডিবাগ করবে বা নতুন ফ্রেমওয়ার্ক নিয়ে লড়াই করবে, তবুও তারা বিশ মিনিট ব্যয় করবে একটি ম্যানুয়াল টেক্সট এডিটিং করতে যা দশ সেকেন্ডের কাজ। কারণটি সব সময় একই: রেগুলার এক্সপ্রেশন দেখতে অনেকটা লাইন নয়েজের মতো। একটি সাধারণ প্যাটার্ন হলো স্ল্যাশ, ব্যাকস্ল্যাশ এবং বিরামচিহ্নের একটি দেয়াল যা দেখে মনে হয় যেন এটি ১৯৯০-এর দশকের কোনো মডেম থেকে এসেছে। এই ভিজ্যুয়াল বিশৃঙ্খলা দক্ষ মানুষদের একটি সত্যিকারের মূল্যবান দক্ষতা থেকে দূরে সরিয়ে দেয়।

সুসংবাদ হলো regex কঠিন নয়। এটি ঘন (dense)। চিহ্নগুলো একটি ছোট জায়গায় প্রচুর অর্থ বহন করে, তাই আপনার চোখ সেখানে এলোমেলো কিছু দেখে যেখানে আসলে একটি অত্যন্ত সুনির্দিষ্ট বর্ণনা থাকে। একবার আপনার সঠিক মেন্টাল মডেল তৈরি হয়ে গেলে, আপনি একে একে চিহ্নগুলো ডিকোড করার চেষ্টা করা বন্ধ করে দেবেন এবং পরিবর্তে তারা যে আকৃতিটি বর্ণনা করে তা পড়বেন। আপনি যখন এটি করবেন, তখন সেই বিশৃঙ্খলা বা নয়েজ সম্পূর্ণভাবে দূর হয়ে যাবে।

একটি প্যাটার্ন, কোনো প্রোগ্রাম নয়

মূল পরিবর্তনটি হলো রেগুলার এক্সপ্রেশন আসলে কী তা বোঝা। আপনি যে কোড লেখেন তার বেশিরভাগই প্রসিডিউরাল (procedural): এটি করো, তারপর সেটি করো, এই শর্তটি পরীক্ষা করো, আবার লুপ চালাও। একটি regex কোনো প্রসিডিউর নয়। এটি একটি স্ট্যাটিক প্যাটার্ন যা বর্ণনা করে টেক্সটটি দেখতে কেমন হওয়া উচিত। আপনি কীভাবে সার্চ করতে হবে তার নির্দেশাবলী লিখছেন না; আপনি ম্যাচিং ইঞ্জিনকে একটি স্কেচ দিচ্ছেন এবং তাকে কাজটি করতে দিচ্ছেন।

এটিকে সাধারণ ইংরেজিতে আকৃতি বর্ণনা করার মতো করে ভাবুন:

  • একটি পাঁচ অঙ্কের সংখ্যা।
  • একটি ইমেল ঠিকানা।
  • একটি লাইন যা একটি বড় হাতের অক্ষর দিয়ে শুরু হয়।

regex আসলে এই কাজটুকুই করছে, শুধু এটি একটি সংকুচিত বর্ণমালা ব্যবহার করে। যখন আপনি \d{5} দেখেন, আপনি জাদু দেখছেন না। আপনি দেখছেন "একটি অঙ্ক, পাঁচবার।" যখন আপনি ^[A-Z] দেখেন, আপনি দেখছেন "লাইনের শুরু, তারপরে একটি বড় হাতের অক্ষর।" দক্ষতাটি মুখস্থ করার নয়। এটি হলো প্যাটার্নের দিকে এক পলক তাকানো এবং সেটিকে সেই সাধারণ ইংরেজি বর্ণনায় ফিরিয়ে অনুবাদ করা শেখা। একবার আপনি সেই অনুবাদ করতে পারলে, ভয়ের বিষয়টি কেটে যাবে।

সময় আসলে কোথায় ব্যয় হয়

মানুষ সাধারণত যথেষ্ট কষ্ট পাওয়ার পরেই regex শেখা শুরু করে। একটি ভালো পদ্ধতি হলো কোনো কাজ করতে গিয়ে পুরো বিকেল নষ্ট করার আগে সেই কাজগুলো চিনে নেওয়া যেগুলোর জন্য একটি প্যাটার্নের প্রয়োজন।

যদি আপনার একটি দুইশ পৃষ্ঠার ডকুমেন্টে প্রতিটি তারিখ খুঁজে বের করার প্রয়োজন হয়, তবে একটি regex একবারে সেগুলো খুঁজে বের করবে। যদি আপনার অ্যাপ্লিকেশন কোনো URL গ্রহণ করার আগে যাচাই করতে হয় যে ব্যবহারকারী একটি সঠিক URL টাইপ করেছেন কি না, তবে একটি প্যাটার্ন ঠিকানার মৌলিক আকৃতি নিশ্চিত করতে পারে। আপনি যদি কোনো ওয়েবসাইট থেকে কপি করা টেক্সট পরিষ্কার করতে চান এবং একাধিক স্পেসকে একটি স্পেসে রূপান্তর করতে চান, তবে একটি রিপ্লেসমেন্ট regex মাত্র চারটি ক্যারেক্টার ব্যবহার করে তা করতে পারে। আপনি যদি অগোছালো সার্ভার লগ থেকে ডেটা সংগ্রহ করেন, তবে regex প্রায়শই অসংগঠিত টেক্সট এবং একটি সুসংগঠিত রিপোর্টের মধ্যে একমাত্র যুক্তিসঙ্গত সেতু হিসেবে কাজ করে।

এখানে মেনে চলার মতো একটি সহজ নিয়ম রয়েছে: আপনি যদি হাতে হাতে পঞ্চাশ বার একটি টেক্সট এডিট করতে যান, তবে থামুন। পরিবর্তে একটি প্যাটার্ন লিখুন। ম্যানুয়াল পুনরাবৃত্তি কেবল ধীরগতির নয়; এটি অনির্ভরযোগ্যও বটে। আপনি হয়তো সাতচল্লিশতম বারটি মিস করবেন অথবা তেত্রিশতম বারটি টাইপো করতে পারেন। একটি প্যাটার্ন কাজটি একবারই সঠিকভাবে করে এবং এটি সেই নিয়মটিকে নথিভুক্ত করে যা আপনি প্রথম থেকেই প্রয়োগ করছিলেন।

একটি কার্যকর লার্নিং লুপ

মুখস্থ করে নিখুঁত প্যাটার্ন টাইপ করার চেষ্টা করবেন না। এভাবেই হতাশা তৈরি হয়। পরিবর্তে, একটি সুনির্দিষ্ট লুপ অনুসরণ করুন যা আপনাকে সিনট্যাক্সে হারিয়ে না ফেলে সামনের দিকে এগিয়ে নিতে সাহায্য করবে।

  1. শব্দে আকৃতিটি বর্ণনা করুন। কোনো স্পেশাল ক্যারেক্টার স্পর্শ করার আগে, আপনি ঠিক কী চান তা লিখে ফেলুন। "চারটি অঙ্ক, তারপরে একটি ড্যাশ, তারপরে দুটি অঙ্ক, তারপরে একটি ড্যাশ, তারপরে দুটি অঙ্ক।" আপনি যদি এটি স্পষ্টভাবে বলতে না পারেন, তবে আপনি এর প্যাটার্ন তৈরি করতে পারবেন না।
  2. একটি প্রথম খসড়া তৈরি করুন। সবচেয়ে বিস্তৃত এবং যুক্তিসঙ্গত চিহ্ন ব্যবহার করে আপনার বর্ণনাটিকে একটি মৌলিক প্যাটার্নে রূপান্তর করুন। নিখুঁত হওয়ার চিন্তা করবেন না। আপনি একটি প্রোটোটাইপ তৈরি করছেন,