PHP Strings & Patterns
PHP Regular Expression পর্ব-১
Last Updated on July 30, 2022 by Masud Alam

Regular Expression বা RegEx কি?
Regular Expression (যাকে আমরা সংক্ষিপ্তরূপে বলি RegEx) হচ্ছে কতগুলো সুনির্দিষ্ট ক্যারেকটারের (Character) এবং সিকোয়েন্স (Sequence) এর সমষ্টি, যা একটি Pattern তৈরী করতে ব্যবহৃত হয়। আর এই Pattern এর মাধ্যমে আমরা একটি string থেকে আমাদের প্রত্যাশিত sub string বা ক্ষুদ্র অক্ষর বিন্যাস Search অথবা replace করতে পারি। ১৯৫০ সালের দিকে মার্কিন গণিতবিদ Stephen Cole Kleene প্রথম Regular Expression এর ধারণার সূত্রপাত করেন
https://w3programmers.com/bangla/php-course/
PHP Regular Expression এ Delimiter
PCRE Regular Expression এ Pattern কে যেকোনো non-alphanumeric, non-backslash, non-whitespace character দিয়ে আবদ্ধ করে দিতে হয়। যেগুলোকে বলা হয় Delimiter. সাধারণত PHP PCRE RegEx এ forward slashes (/), hash signs (#) এবং tildes (~) কে Delimeter হিসেবে ব্যবহৃত হয়। তা ছাড়া নিম্নের উদাহরণে Pattern এ দেওয়া সব গুলো Delimeter এ Valid.
/foo bar/ #^[^0-9]$# +php+ %[a-zA-Z0-9_-]%
বন্ধনী গুলো যেমন: (), {}, [], <> দিয়েও PHP PCRE তে Delimiter দেওয়া যায়। ঠিক নিচের মতো :
(this [is] a (pattern)) {this [is] a (pattern)} [this [is] a (pattern)] <this [is] a (pattern)>
PHP তে একটা বড় String এ কিভাবে কোনো কিছু খুঁজে বের করবেন?
PHP তে একটা বড় String এর মধ্যে কোনো কিছু আছে কিনা তা check করতে হলে আপনাকে ধাপ গুলো পূরণ করতে হবে।
- ১. যেকোনো একটা Delimiter দিয়ে যাকে search করতে চান তার Pattern তৈরী করুন।
- ২. preg_match() অথবা preg_match_all() ফাঙ্কশনটি call করুন। দুটি function এর ই প্রথম Parameter হবে আপনার তৈরী pattern টি , দ্বিতীয় Parameter হবে যেই String এর উপর Search চালাবেন সেটি। আর তৃতীয় Parameter টি হবে search করে পাওয়া value রাখার জন্য। সেক্ষেত্রে preg_match() এবং preg_match_all() function আপনার search করা value টি পেলে 1 রিটার্ন করবে, অন্যথায় 0 রিটার্ন করবে।
নিচের উদাহরণে সবগুলো Delimiter ব্যবহার করা হয়েছে :
<?php // create a string $string = 'abcdefghijklmnopqrstuvwxyz0123456789'; //Pattern with '/' Delimiter $pattern1="/pqr/"; echo preg_match($pattern1, $string,$value); //Output: 1 //Pattern with '#' Delimiter $pattern2="#pqr#"; echo preg_match($pattern2, $string,$value); //Output: 1 //Pattern with '+' Delimiter $pattern3="+pqr+"; echo preg_match($pattern3, $string,$value); //Output: 1 //Pattern with '%' Delimiter $pattern4="%pqr%"; echo preg_match($pattern4, $string,$value); //Output: 1 //Pattern with '~' Delimiter $pattern5="~pqr~"; echo preg_match($pattern5, $string,$value); //Output: 1 //Pattern with '( )' Delimiter $pattern6="(pqr)"; echo preg_match($pattern6, $string,$value); //Output: 1 //Pattern with '{ }' Delimiter $pattern7="{pqr}"; echo preg_match($pattern7, $string,$value); //Output: 1 //Pattern with '[ ]' Delimiter $pattern8="[pqr]"; echo preg_match($pattern8, $string,$value); //Output: 1 //Pattern with '< >' Delimiter $pattern9="<pqr>"; echo preg_match($pattern9, $string,$value); //Output: 1 ?>
উল্লেখ্য , preg_match() function এর তৃতীয় Parameter এ Search করে প্রথম search value যেটি পায়, শুধু সেটি রাখে , অন্য দিকে preg_match_all() search করে পাওয়া সব গুলো value ই রাখে।
https://w3programmers.com/bangla/php-course/
PHP Regular Expression এ Meta Characters
PCRE Regular Expression এ Pattern এর Delimiter এর মধ্যে কিছু Special Character ব্যবহার হয় কিছু Special কাজের জন্য, যেগুলোকে বলা হয় Meta Character. PHP PCRE RegEx এ দুই ধরণের Meta Character আছে। কিছু Meta Character আছে square brackets এর মধ্যে ব্যবহৃত হয় , আর কিছু আছে square brackets এর বাহিরে ব্যবহৃত হয়।
Meta-character | Description |
---|---|
\ | কোনো নির্দিষ্ট character কে escape করার জন্য ব্যবহৃত হয়। |
^ | String এর শুরু থেকে Search করার জন্য ব্যবহৃত হয়। |
$ | String এর শেষের দিক থেকে Search করার জন্য ব্যবহৃত হয়। |
. | যেকোনো একটি Character কে Match করার জন্য ব্যবহৃত হয়। |
[ | character class বা character group শুরু করার জন্য ব্যবহৃত হয়। |
] | character class বা character group শেষ করার জন্য ব্যবহৃত হয়। |
| | alternative বা OR Search করার জন্য ব্যবহৃত হয়। |
( | Sub Pattern শুরু করার জন্য ব্যবহৃত হয় |
) | Sub Pattern শেষ করার জন্য ব্যবহৃত হয় |
Caret (^) Sign দিয়ে String এর শুরু থেকে Search
<?php // create a string $string = 'abcdefghijklmnopqrstuvwxyz0123456789'; // try to match the beginning of the string if(preg_match("/^abc/", $string)) { // if it matches we echo this line echo 'The string begins with abc'; } else { // if no match is found echo this line echo 'No match found'; } ?>
Output
The string begins with abc
dollar ($) Sign দিয়ে String এর শেষ থেকে Search
<?php // create a string $string = 'abcdefghijklmnopqrstuvwxyz0123456789'; // try to match the beginning of the string if(preg_match("/89\$/", $string)) { // if it matches we echo this line echo 'The string End with 89'; } else { // if no match is found echo this line echo 'No match found'; } ?>
Output
The string End with 89
উল্লেখ্য, এখানে আমরা dollar ($) sign কে search value থেকে escape করার জন্য ( \ ) backword slash ব্যবহার করেছি।
https://w3programmers.com/bangla/php-course/
যেকোনো একটা character ম্যাচ করার জন্য dot বা full stop (.) sign এর ব্যবহার:
<?php // create a string $string = 'The dog has no food.'; // look for a match preg_match_all("/d.g/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => dog ) )
square brackets “[ ]” দিয়ে Character Class বা group এর মধ্যে Pattern Matching
<?php // create a string $string = 'This is a big bog bug bag String'; // Search for a match preg_match_all("/b[aoiu]g/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => big [1] => bog [2] => bug [3] => bag ) )
Parenthesis “( )” দিয়ে Sub Pattern তৈরী এবং Pattern Matching
<?php // a simple string $string = "This is a Hello World script"; // try to match the patterns Jello or Hello // put the matches in a variable called matches preg_match_all("/(Je|He)llo/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => Hello ) [1] => Array ( [0] => He ) )
Meta-character | Description |
---|---|
\ | যেকোনো character কে escape এর জন্য ব্যবহৃত হয়। |
^ | যেকোনো character কে বাদ দিয়ে Pattern Matching এর জন্য ব্যবহৃত হয়। |
– | ক্যারেক্টার Range কে indicate করার জন্য ব্যবহৃত হয়। |
backword slash (\) দিয়ে square brackets এর মধ্যে কোনো character কে escape করা।
<?php // create a string $string = 'This is a [templateVar]'; // try to match our pattern preg_match_all("/[\[\]]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => [ [1] => ] ) )
https://w3programmers.com/bangla/php-course/
Square Bracket এর মধ্যে Caret (^) Sign দিয়ে String এর নির্দিষ্ট একটি বা কতগুলো Character কে বাদ দিয়ে বাকি গুলো Search
<?php // create a string $string = 'abcefghijklmnopqrstuvwxyz0123456789'; // echo our string preg_match_all("/[^b]/", $string, $matches); print_r($matches); ?>
ব্যাখ্যা: এখানে b ব্যতীত বাকি গুলো print করবে।
<?php // create a string $string = 'abcefghijklmnopqrstuvwxyz0123456789'; // echo our string preg_match_all("/[^a-z]/", $string, $matches); print_r($matches); ?>
ব্যাখ্যা: এখানে a থেকে z character গুলো ব্যতীত বাকি গুলো print করবে। আর dash (-) sign ব্যবহার করা হয়েছে a-z range বুঝানোর জন্য।
Output
Array ( [0] => Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) )
PHP Regular Expression এ Special sequences
PHP Requla Expression এ কিছু Special Squence আছে যে গুলো ব্যবহার করে অনেক বড় একটা Pattern কে খুব সহজে ছোট করে ফেলা যায়। যেমন: (\w) character এর দ্বারা বুঝানো হয় যেকোনো alpha Numeric Character (a-z,A-Z,0-9,_) , নিচে সবগুলো Special sequence কে table আকারে দেওয়া হলো:
Special sequence Name | Description |
---|---|
\d | শুধু মাত্র Decimal Digit বুঝানোর জন্য। |
\D | Decimal Digit ছাড়া অন্য যেকোনো Character বুঝানোর জন্য। |
\h | যেকোনো horizontal whitespace character বুঝানোর জন্য ব্যবহৃত হয়। (since PHP 5.2.4) |
\H | horizontal whitespace character ছাড়া যেকোনো Character বুঝানোর জন্য ব্যবহৃত হয়। (since PHP 5.2.4) |
\s | যেকোনো whitespace character বুঝানোর জন্য ব্যবহৃত হয়। |
\S | whitespace character ছাড়া যেকোনো Character বুঝানোর জন্য ব্যবহৃত হয়। |
\v | যেকোনো vertical whitespace character বুঝানোর জন্য ব্যবহৃত হয়। (since PHP 5.2.4) |
\V | vertical whitespace character ছাড়া যেকোনো Character বুঝানোর জন্য ব্যবহৃত হয়(since PHP 5.2.4) |
\w | যেকোনো alpha numeric character বুঝানোর জন্য ব্যবহৃত হয়। |
\W | Non alpha numeric character বুঝানোর জন্য ব্যবহৃত হয়। |
[\d] দিয়ে শুধু মাত্র Decimal Digit গুলো Search
<?php // create a string $string = 'abcefghijklmnopqrstuvwxyz0123456789'; // echo our string preg_match_all("/[\d]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) )
[\D] দিয়ে শুধু মাত্র Non Decimal Digit গুলো Search
<?php // create a string $string = 'abcefghijklmnopqrstuvwxyz0123456789'; // echo our string preg_match_all("/[\D]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => a [1] => b [2] => c [3] => e [4] => f [5] => g [6] => h [7] => i [8] => j [9] => k [10] => l [11] => m [12] => n [13] => o [14] => p [15] => q [16] => r [17] => s [18] => t [19] => u [20] => v [21] => w [22] => x [23] => y [24] => z ) )
https://w3programmers.com/bangla/php-course/
[\s] Small s দিয়ে শুধু মাত্র white space গুলো Search
<?php // create a string $string = 'abcdefghijklmnopqrstuvwxy 0123456789'; // echo our string preg_match_all("/[\s]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => [1] => [2] => ) )
উল্লেখ্য এখানে আমাদের string এ ৩ টি whitespace আছে তাই array তিনটি null বা ফাঁকা index আসছে।
[\S] Capital S দিয়ে শুধু মাত্র Non white space গুলো Search
<?php // create a string $string = 'abcdefghijklmnopqrstuvwxy 0123456789'; // echo our string preg_match_all("/[\S]/", $string, $matches); print_r($matches); ?>
উপরের Code টির Output হিসেবে whitespace গুলো ব্যতীত বাকি সব Character ই আসবে।
নোট: \h,\H,\v,\V গুলোও \s এবং \S এর মতোই , তবে এগুলো বিশেষ ভাবে horizontal এবং vertical white space নিয়ে কাজ করে।
[\w] দিয়ে শুধু মাত্র Alpha Numeric Character গুলো Search
<?php // create a string $string = 'ab-cde*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234<567890'; // match our pattern containing a special sequence preg_match_all("/[\w]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s [19] => t [20] => u [21] => v [22] => w [23] => x [24] => y [25] => z [26] => 0 [27] => 1 [28] => 2 [29] => 3 [30] => 4 [31] => 5 [32] => 6 [33] => 7 [34] => 8 [35] => 9 [36] => 0 ) )
[\W] দিয়ে শুধু মাত্র Non Alpha Numeric Character গুলো Search
<?php // create a string $string = 'ab-cde*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234<567890'; // match our pattern containing a special sequence preg_match_all("/[\W]/", $string, $matches); print_r($matches); ?>
Output
Array ( [0] => Array ( [0] => - [1] => * [2] => @ [3] => [4] => [5] => & [6] => [7] => ( [8] => ) [9] => + [10] => ? [11] => [12] => > [13] => < ) )
3 thoughts on “PHP Regular Expression পর্ব-১”
Leave a Reply
You must be logged in to post a comment.
As-Salamu-Alaikum Sir. A very effective topic for PHP learners.
Walaikum Assalam, Thank you
যেকোনো একটা character ম্যাচ করার জন্য dot বা full stop (.) sign এর ব্যবহার:
Output
Array
(
[0] => Array
(
[0] => dog
)
)