• ভাষা:
  • English
  • বাংলা
হোম > পিএইচপি অ্যাডভান্সড টিউটোরিয়াল
লেখক পরিচিতি
লেখকের নাম: আনোয়ার হোসেন
মোট লেখা:৭৭
লেখা সম্পর্কিত
পাবলিশ:
২০১৯ - জানুয়ারী
তথ্যসূত্র:
কমপিউটার জগৎ
লেখার ধরণ:
প্রোগ্রামিং
তথ্যসূত্র:
প্রোগ্রামিং
ভাষা:
বাংলা
স্বত্ত্ব:
কমপিউটার জগৎ
পিএইচপি অ্যাডভান্সড টিউটোরিয়াল
পিএইচপি অ্যাডভান্সড টিউটোরিয়াল
আনোয়ার হোসেন

গত পর্বে পিএইচপি ফিডব্যাক ফর্ম ও পিএইচপি রেগুলার এক্সপ্রেশন সম্পর্কে আলোচনা করা হয়েছিল। এ পর্বে আরো কিছু প্যাটার্ন সম্পর্কে আলোচনা করা হয়েছে।

আরো কিছু প্যাটার্নের উদাহরণ
\w-এর অর্থ হচ্ছে যেকোনো শব্দ হতে হবে আর \W (বড় হাতের)-এর অর্থ হলো শব্দ হতে পারবে না।
\w-এর অর্থ হলো যেকোনো শব্দ দিয়েই শুরু হতে হবে।
\d{7}test$-এর অর্থ হলো ৭ সংখ্যার যেকোনো অঙ্ক, এরপর test শব্দ দিয়ে শেষ হতে হবে।

পিএইচপিতে রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য আগে দুটি অপশন ছিল। এর মধ্যে চঙঝওঢ রেগুলার এক্সপ্রেশন এখন বাদ দেয়া হয়েছে। এখন শুধু চঈজঊ রেগুলার এক্সপ্রেশনের সাপোর্ট আছে। টেক্সট প্রসেসিংয়ের এই সিস্টেমটা পার্ল ল্যাঙ্গুয়েজ থেকে নিয়ে পরে পিএইচপির জন্য যোগ্য করা হয়েছে। পার্ল ল্যাঙ্গুয়েজের এই টেক্সট প্রসেসিং সিস্টেম বিশ্বের সব ল্যাঙ্গুয়েজের চেয়ে বেশি উন্নত। শুধু পিএইচপি নয়, আরো অনেক ল্যাঙ্গুয়েজ আছে, যারা এই সিস্টেম তাদের ল্যাঙ্গুয়েজের জন্য কমপিউটেবল করে নিয়েছে। তবে যে সিস্টেমেরই ফাংশন ব্যবহার করেন না কেনো, প্যাটার্ন লেখার নিয়ম প্রায়ই একই।

প্যাটার্ন লেখার নিয়ম
ডিলিমিটার

ফাংশনে যখন প্যাটার্ন লিখবেন, তখন অবশ্যই প্যাটার্নের আগে-পিছে ডিলিমিটার (সীমাবদ্ধক) দিতে হবে। অক্ষর, নাম্বার, ব্যাক স্ল্যাশ, স্পেস বাদে যেকোনো কিছু ডিলিমিটার হিসেবে ব্যবহার করতে পারবেন। সাধারণত “/” (ফরোয়ার্ড স্ল্যাশ) বেশি ব্যবহার করা হয়। আপনি ইচ্ছে করলে “#” (হ্যাশ), “%” এসব ব্যবহার করতে পারবেন।
প্যাটার্ন লেখার সময় যেসব চিহ্ন ব্যবহার করা হয়, এসব চিহ্নই যদি খুঁজে বের করতে হয় (match করতে হয়), তাহলে এসব চিহ্নের আগে একটি “\” (ব্যাক স্ল্যাশ) দিতে হবে। কয়েকটি প্যাটার্ন হলো
/বিন/
#[a-y]#
/[a\-y]/

শেষের প্যাটার্নটি ছোট হাতের ধ, হাইফেন (-) এবং ছোট হাতের ু এই তিনটির মধ্যে যেকোনোটির সাথে মিলবে। অর্থাৎ হয় ধ অথবা - অথবা ু। কিন্তু দ্বিতীয় প্যাটার্নটি ছোট হাতের ধ থেকে ু পর্যন্ত যেকোনোটির সাথে মিলবে। থার্ড ব্রাকেটের মধ্যে হাইফেন (-)-এর বিশেষ অর্থ আছে। এটা দিয়ে পরিসীমা বুঝায়, অর্থাৎ কত থেকে শুরু করে কত পর্যন্ত হবে। এই হাইফেন (-)টির সামনে (তৃতীয় প্যাটার্নে) ব্যাক স্ল্যাশ দিয়ে এটাকে লিটারেল ক্যারেক্টার বানিয়ে দিয়েছি।

মেটা ক্যারেক্টার

প্যাটার্নে কোনো অক্ষর লিখলে সেটা গিয়ে কাক্সিক্ষত টেক্সটে খুঁজবে, যেমন উপরে প্রথম প্যাটার্নটি বিন এটি মিলাবে। এগুলো হচ্ছে লিটারেল ক্যারেক্টার। কিন্তু কিছু অক্ষর বা চিহ্ন আছে, যেগুলো প্যাটার্নে ব্যবহার করলে সে নিজেকে মিলাবে না বরং তার বিশেষ অর্থ আছে। নিচের ক্যারেক্টারগুলোর এর বিশেষ অর্থ আছে প্যাটার্নে, এগুলোকে মেটা ক্যারেক্টার বলে।
$ ( ) * + . ? [  \ ^ {  ।

এই চিহ্নগুলো যখন প্যাটার্নে ব্যবহার করবেন, তখন এগুলো নিজেকে মিলাবে না বরং বিশেষ অর্থ প্রকাশ করবে। যেমন /!$/ এই প্যাটার্নটি মিলবে ঔড়ড়সষধ!, ঐড়ড়ৎধু! এগুলোর সাথে। !-এর পরে ডলার সাইন দিলে যে লাইনের শেষে ! চিহ্ন আছে, সেটার সাথে মিলবে। 
. (ডট) দিয়ে যেকোনো একটি ক্যারেক্টার বোঝায়। যেমন /re.oan/ এই প্যাটার্নটি মিলবে rejoin, rayon ইত্যাদিতে। অর্থাৎ e এবং o-এর মাঝখানে যেকোনো একটি ক্যারেক্টার থাকতে হবে। এমনকি একটি সংখ্যা হলেও থাকতে হবে।

এবার চিহ্ন দিয়ে অপশন দেয়া যায়, যেমন /ৎবলড়ধহ।ৎবুড়ধহ/ এই প্যাটার্নটির অর্থ হয় ৎবলড়ধহ না হয় ৎবুড়ধহ। ইচ্ছে করলে দুটির বেশি অপশন দিতে পারেন, যেমন /ৎবলড়ধহ।ৎবুড়ধহ।ৎবুধিহ/ এভাবে। প্রথম ব্রাকেট দিয়ে আরো উন্নত করে লেখা যায়, যেমন /re(j|y)oan)/ -এর অর্থ হচ্ছে প্রথমে শুরু হবে re দিয়ে, এরপর হয় ল অথবা y এবং শেষ হবে ড়ধহ দিয়ে।

কোয়ান্টিফায়ার

মেটা ক্যারেক্টারের মধ্যে *,?,+ এগুলোকে আবার বলে কোয়ান্টিফায়ার। এগুলো যে আইটেমের পওে দেবেন সেটা কতবার হবে এটা বোঝাবে। যেমন /ৎ+/ -এর দিয়ে বোঝায় কমপক্ষে একটি ৎ থাকতে হবে। এটি মিলবে r, r r, or, refuse ইত্যাদিতে।

* এটা যদি কোনো আইটেমের সামনে থাকে, তাহলে সেই আইটেমটি শূন্য থেকে শুরু করে আরো বেশি হতে পারে। যেমন /ন*ং/ মিলবে ং, নং, নননননং ইত্যাদিতে।
? এটা কোনো আইটেমের সামনে থাকলে সেটি ঐচ্ছিক হয়ে যায়। এটির আলোচনা প্রথম উদাহরণেও হয়েছে।

ক্যারেক্টার ক্লাস

প্যাটার্নে থার্ড ব্রাকেটের ভেতর যা থাকবে, তাই ক্যারেক্টার ক্লাস। ক্যারেক্টার ক্লাসের ভেতর থাকা ক্যারেক্টারগুলোর যেকোনো একটি মিলবে। এর আগে উদাহরণে যেমন দেখানো হয়েছে। যেমন [ধ-ু]-এর অর্থ হচ্ছে হয় ধ না হয় ন না হয় প ... এভাবে - পর্যন্ত। মেটা ক্যারেক্টারগুলোর অর্থ ক্যারেক্টার ক্লাসের ভেতরে এক রকম আর এর বাইরে আরেক রকম।
যেমন ক্যারেট (^) এই মেটা ক্যারেক্টারটি যদি ক্যারেক্টার ক্লাসের বাইরে থাকে, তাহলে এর অর্থ যেটি হবে সেটি ক্যারেক্টার ক্লাসের ভেতরে থাকলে যা হবে তার সম্পূর্ণ বিপরীত। যেমন /^বিন/ এই প্যাটার্নটি মিলবে ওই লাইনের সাথে যে লাইন বিন দিয়ে শুরু হয়েছে। কিন্তু এই ক্যারেট চিহ্নই যদি ক্যারেক্টার ক্লাসের ভেতরে থাকে, তাহলে অর্থ হবে এর বিপরীত, যেমন /[^বিন]/ দিয়ে শুধু সেটি মিলবে যেটি বিন দিয়ে শুরু হয়নি। /[^ধ-ুঅ-ত]/ দিয়ে ছোট এবং বড় হাতের ধ থেকে ু পর্যন্ত সব বাদ দিয়ে খুঁজবে।

ব্যাক স্ল্যাশ দিয়ে তৈরি কিছু ক্যারেক্টারের অর্থ
\ফ এটি প্যাটার্নে থাকলে বুঝতে হবে সেখানে কোনো সংখ্যা হবে।
\উ এটি প্যাটার্নে থাকলে বুঝতে হবে সেখানে কোনো সংখ্যা হতে পারবে না।
\ং আগেরটির বিপরীত অর্থাৎ স্পেস।
\ঝ আগেরটির বিপরীত অর্থাৎ স্পেস নয়।
এই ক্যারেক্টারগুলো একেকটি একটি ক্যারেক্টার ক্লাসের মতো, যেমন \ফ হচ্ছে [০-৯] -এর সমান, আবার \উ হচ্ছে [^০-৯] -এর সমান। ধারণা আসছে না এবার? এখানে গুরুত্বপূর্ণ কয়েকটি আলোচনা করা হলো আরো আছে প্রয়োজেনে পিএইচপি ম্যানুয়াল দেখে নেবেন।
যাই হোক, এ ধরনের আরো অনেক নিয়ম আছে প্যাটার্ন লেখার, এমনকি রেগুলার এক্সপ্রেশনের (প্যাটার্ন) ওপর বড় বড় বইও আছে। সব নিয়ম আলোচনা করা এখানে সম্ভব নয়। এখানে গুরুত্বপূর্ণ এবং সেসব প্রয়োজনীয় বিষয়ের আলোচনা করা হয়েছে, যেগুলো দিয়ে রেগুলার এক্সপ্রেশন সম্পর্কে ধারণা স্বচ্ছ হয়
পত্রিকায় লেখাটির পাতাগুলো
লেখাটি পিডিএফ ফর্মেটে ডাউনলোড করুন
লেখাটির সহায়ক ভিডিও
২০১৯ - জানুয়ারী সংখ্যার হাইলাইটস
চলতি সংখ্যার হাইলাইটস