PHP Regular Expression পর্ব-১

Last Updated on July 30, 2022 by Masud Alam

PHP Regular Expression
PHP Regular Expression

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 এর বাহিরে ব্যবহৃত হয়।

square brackets এর বাহিরে ব্যবহৃত Meta Characters
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
        )

)

square brackets এর মধ্যে ব্যবহৃত Meta Characters
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 List
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] => <
        )

)

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৪ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। ভাবে বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০এরও অধিক ছাত্র । বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance এবং Mastering DevOps Engineering কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

3 thoughts on “PHP Regular Expression পর্ব-১

  1. যেকোনো একটা character ম্যাচ করার জন্য dot বা full stop (.) sign এর ব্যবহার:

    Output
    Array
    (
    [0] => Array
    (
    [0] => dog
    )

    )

Leave a Reply