PHP Professional,Laravel 5.6 Beginning to Advance এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

PHP Regular Expression পর্ব-১

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 এর ধারণার সূত্রপাত করেন

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 ই রাখে।

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 ব্যবহার করেছি।

যেকোনো একটা 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] => ]
        )

)

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
        )

)

[\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] => <
        )

)

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।
2 comments on “PHP Regular Expression পর্ব-১

Leave a Reply

Your email address will not be published. Required fields are marked *