আপনি কি কখনো একটি টেক্সটের টুকরোতে রিকারিং প্যাটার্ন খুঁজে বের করার চেষ্টা করেছেন? আপনি হয়তো আপনার ব্রাউজার বা ওয়ার্ড প্রসেসরের সার্চ ফাংশন ব্যবহার করেছেন, কিন্তু যখন আপনাকে কিছু জটিল খুঁজে বের করতে হয়, তবে এটি প্রায়বিধান সুইয়ার র আঁটে সুই খুঁজে বের করার মতো।
সৌভাগ্যের কথা, টেক্সটে প্রিসাইজ প্যাটার্ন ক্যারেক্টারレভেল পর্যন্ত পিক আউট করার একটি পথ আছে। এটিকে রেগুলার এক্সপ্রেশন (RegEx) বলে, এবং এটি আপনাকে টেক্সটের মাধ্যমে সার্চ করার মাস্টার বানিয়ে দেয়।
Regex কোথায় ব্যবহার করা যায়?
যদিও Unix এবং Linux এগুলো জনপ্রিয় করেছে, রেগুলার এক্সপ্রেশন বিভিন্ন প্যাকেজে উপলব্ধ, যার মধ্যে Microsoft Word রয়েছে।
রেগুলার এক্সপ্রেশন সবচেয়ে উল্লেখযোগ্যভাবে কিছু লিনাক্স প্রোগ্রামে ব্যবহার হয়, যার মধ্যে রয়েছে grep, Awk এবং Sed।
উদাহরণস্বরূপ, আপনি আপনার PC-র USB ডিভাইস চেক করতে চাইতে পারেন। lspci ব্যবহার করলে, আপনি সকল ডিভাইসের তালিকা পাবেন, এবং আপনাকে নিজে USB এন্ট্রিগুলো লোকেট করতে হবে। আপনি পরিবর্তে নিচেরটি ব্যবহার করতে পারেন শুধু USB ডিভাইসগুলো দেখানোর জন্য:
lspci | grep "USB"
এটি RegEx-এ একশন-এর সবচেয়ে সহজ উদাহরণ। এটি টার্মিনালে রেগুলার এক্সপ্রেশন ব্যবহার করার সবচেয়ে জনপ্রিয় পথ কিন্তু একমাত্র পথ নয়। আজ আপনি অনেক ধরনের সফটওয়্যারে RegEx সাপোর্ট পাবেন, টেক্সট এডিটর থেকে ফাইল ম্যানেজার পর্যন্ত।
প্যাটার্ন খুঁজে বের করা
আপনি সম্ভবত * ক্যারেক্টারটি ব্যবহার করেছেন, যা টার্মিনালে ফাইল বা ফোল্ডার সিলেক্ট করার সময় 와াইল্ডকার্ড হিসেবে কাজ করে। উদাহরণস্বরূপ, একটি ফোল্ডারের সকল JPG ফাইল লিস্ট করতে, আপনি ব্যবহার করতে পারেন:
ls *.jpg
উপরের RegEx সমতুল্য হবে:
ls | grep -E "\.jpg"
jpg এবং png উভয় ফাইল সার্চ করতে, ব্যবহার করুন:
ls | grep -E "(\.jpg|\.png)"
রেঞ্জ (Ranges)
আপনি যদি একটি প্যাটার্নের বদলে ক্যারেক্টারের একটি নির্দিষ্ট রেঞ্জ সার্চ করতে চান, তবে আপনি সেটি ব্র্যাকেটে ডিফাইন করে করতে পারেন। যদি, উদাহরণস্বরূপ, আপনি [a-z] আপনার প্যাটার্ন হিসেবে ব্যবহার করেন, তবে এটি ইংরেজি বর্ণমালার যেকোনো স্মল লেটারের স্ট্রিং ম্যাচ করবে।
আপনি যেমন অনুমান করেছেন, [A-Z] কেবল ক্যাপিটাল লেটার সিলেক্ট করবে। যেকোনো রেঞ্জের লেটার, বড় এবং ছোট হাতের দুটোই বেছে নেওয়ার জন্য, এক্সপ্রেশনটি হবে [a-zA-Z]।
আপনার প্যাটার্নের একটি নির্দিষ্ট সংখ্যক উদাহরণ লোকেট করতে, আপনি কার্লি ব্র্যাকেটে স্টেট করতে পারেন। {5} আপনার প্যাটার্নের পাঁচটি ওকারেন্স রিটার্ন করবে। আপনি নাম্বার রেঞ্জও ব্যবহার করতে পারেন, তাই {5,10} আপনাকে পাঁচ থেকে দশটি উদাহরণ প্রেজেন্ট করবে।
মেটাক্যারেক্টার (MetaCharacters)
রেগুলার এক্সপ্রেশনে, আপনি একটি স্ট্রিংয়ের অংশ সার্চ করতে পারেন দুটি ক্যারেক্টার দিয়ে যাদের মেটাক্যারেক্টার বলা হয়। সেগুলো শেলে আপনি যা ব্যবহার করতে পারেন ওয়াইল্ডকার্ড ম্যাচের সাথে সাদৃশ্যপূর্ণ।
প্রাইমারি একটা হলো সিম্পল ডট, যা যেকোনো অন্য সিঙ্গেল ক্যারেক্টারকে স্ট্যান্ড করে। আপনি যদি প্যাটার্ন c.ll ব্যবহার করেন, তবে এটি "cell"-কে ম্যাচ করবে কিন্তু "cull" এবং "call"-কেও।
একটি ডটের পর একটি एস্টেরিস্ক দিয়ে, আপনি এটি ব্যবহার করতে পারেন অসংখ্য ক্যারেক্টার ম্যাচ করার জন্য। উদাহরণস্বরূপ, .*board "keyboard" এবং "skateboard" উভয়েরই জন্য ম্যাচ হবে। এমনকি "key" এবং "skate"-এর ভিন্ন সংখ্যক লেটার থাকলেও।
এস্কেপ (Escape)
আপনি লক্ষ্য করেছেন হয় আমাদের উদাহরণে, যেখানে আমরা ভিন্ন টাইপের ইমেজ ফাইল সিলেক্ট করলাম, আমরা পিরিয়ডের আগে ব্যাকস্ল্যাশ ব্যবহার করলাম ("\.jpg")। সেটিই কীভাবে RegEx-এ স্পেশাল ক্যারেক্টার এস্কেপ করা হয়।
আমরা যদি সেগুলো ব্যবহার না করতাম, আমাদের প্যাটার্ন শুধু ফাইল এক্সটেনশনগুলোকে ম্যাচ করত না, স্ট্রিং যেমন "\.jpg" এবং "\.png", বরং "ajpg" এবং "opng"-কেও ম্যাচ করত। মনে রাখবেন, . একটি ওয়াইল্ডকার্ড যা যেকোনো ক্যারেক্টার ম্যাচ করে।
অ্যাঙ্কার এবং বাউন্ডারি (Anchors and Boundaries)
অ্যাঙ্কার এবং বাউন্ডারি আপনাকে আরও প্রিসাইজলি ডিফাইন করতে দেয় আপনি কী খুঁজছেন।
শুধু "computer" আপনি পাওয়ার জন্যই, অন্য কোনো ক্যারেক্টার আটাচড না থাকা সামনে বা পেছনে, আপনাকে প্যাটার্ন ডিফাইন করতে হবে \<computer\> হিসেবে।
আপনি লাইনটির শুরু বা শেষে যেসব প্যাটার্ন আসে সেগুলো স্পেসিফিক্যালি সার্চ করতে পারেন। এটি অর্জিত হয় ^ এবং $ ক্যারেক্টারের মাধ্যমে যথাক্রমে।
তাহলে, আপনি যদি শুধু সেই এন্ট্রিগুলো খুঁজতে চান যেখানে "computer" শব্দটি লাইনটির শুরুতে আসে, আপনার প্যাটার্ন দেখাবে ^computer। বিপরীতভাবে, যখন এটি লাইনটির শেষে থাকে, প্যাটার্ন পরিবর্তিত হবে computer$।
এই হলো RegEx-এর সহজ নিয়মগুলো, যেগুলো আপনি মিক্স ও করতে পারেন প্রিসাইজলি সেই প্যাটার্নগুলো খুঁজে বের করতে যেগুলো আপনি খুঁজছেন। আপনি লাইনের শুরুতে ক্যারেক্টার রেঞ্জ, শেষে অ্যালটারনেটিং ওয়ার্ড, স্পেসিফিক ডেট, বা বছরের একটি রেঞ্জ, একটি একক স্ট্রিং টেক্সট দিয়ে সার্চ করতে পারেন।
আমাদের রেগুলার এক্সপ্রেশন চিটশিট চেক আউট करना ভুলবেন না রেগুলার এক্সপ্রেশন মাস্টার করার জন্য।