سرفصل‌های آموزشی
آموزش رگیولار اکسپرشن
آشنایی با نحوهٔ استفاده از Regular Expression در زبان PHP

آشنایی با نحوهٔ استفاده از Regular Expression در زبان PHP

فانکشنی در هستهٔ زبان برنامه‌نویسی پی‌اچ‌پی گنجانده شده تحت عنوان ()preg_match که این امکان را در اختیار توسعه‌دهندگان این زبان قرار می‌دهد تا بتوانند به سادگی در یک استرینگ خاص به دنبال الگوی مد نظر خود باشند به طوری که اگر الگوی مد نظر یافت شد مقدار true و در غیر این صورت مقدار false ریترن خواهد شد. برای درک بهتر این موضوع،‌ فایلی با نامی دلخواه همچون index.php در محیط لوکال‌هاست ساخته و آن را به صورت زیر تکمیل می‌کنیم:

<?php
$string = 'sokanacademy';
$regex = "/sokanacademy/";
print_r(preg_match($regex, $string));

ساختار فانکشن ()preg_match بدین صورت است که آرگومان اول رِجِکس و آرگومان دوم آن استرینگی است که قصد داریم داخلش به جستجو بپردازیم به طوری که اگر مقدار مد نظر یافت شد خروجی 1 یا true ریترن می‌گردد و اگر هم یافت نشد، مقدار 0 یا false بازگردانده خواهد شد. همچنین می‌توان یک آرگومان سوم با نامی دلخواه نیز برای این تابع در نظر گرفت بدین صورت که اگر چیزی از استرینگ ورودی با الگوی موجود در رگیولار اسکپرشن مَچ شد، به عنوان اِلِمان اول آرایه بازگردانده خواهد شد به طوری که برای مثال خواهیم داشت:

<?php
$string = 'sokanacademy';
$regex = "/sokanacademy/";
preg_match($regex, $string, $match);
print_r($match);

به عنوان خروجی اسکریپت فوق خواهیم داشت:

Array
(
    [0] => sokanacademy
)

اگر هم الگوی فوق با هیچ بخشی از استرینگ موجود مَچ نشود، یک آرایهٔ خالی ریترن خواهد شد.

آشنایی با نحوهٔ‌ استفاده از فِلگ‌های i و g

رگیولار اکسپرشن در زبان پی‌اچ‌پی به صورت پیش‌فرض نسبت به حروف بزرگ و کوچک حساس است اما در عین حال با استفاده فِلگ i می‌توان این رفتار را تغییر داد:

<?php
$string = 'SokanAcademy';
$regex = "/sokanacademy/i";
preg_match($regex, $string, $match);
print_r($match);

از آنجا که استرینگ فوق به صورت PascalCase نوشته شده است و همچنین از فِلگ i داخل پترن خود استفاده کرده‌ایم، چنین رِجِکسی با این استرینگ مَچ خواهد شد.

پیش از این فرا گرفتیم که با استفاده از فِلگ g می‌توان به صورت سراسری داخل یک استرینگ به جستجو پرداخت به طوری که برای مثال داریم:

<?php
$string = 'sokanacademy sokanacademy sokanacademy';
$regex = "/sokanacademy/g";
preg_match($regex, $string, $match);
print_r($match);

در صورتی که اسکریپت فوق را اجرا کنیم خواهیم داشت:

/var/www/regex$ php index.php 
PHP Warning:  preg_match(): Unknown modifier 'g' in /var/www/regex/index.php on line 4

در متن هشدار آمده است که فِلگ g در تابع ()preg_match به رسمیت شناخته نمی‌شود. لازم به یادآوری است که در این تابع هرگز نمی‌توان از این فِلگ استفاده کرد بلکه در عوض تابع دیگری تحت عنوان ()preg_match_all در هستهٔ‌ این زبان گنجانده شده که دقیقاً‌ چنین کاری انجام می‌دهد:

<?php
$string = 'sokanacademy sokanacademy sokanacademy';
$regex = "/sokanacademy/";
preg_match_all($regex, $string, $match);
print_r($match);

همان‌طور که ملاحظه می‌شود، ابتدا فِلگ g را از داخل رِجِکس خود حذف نموده سپس از فانکشن ()preg_match_all استفاده کرده‌ایم به طوری که در خروجی خواهیم داشت:

Array
(
    [0] => Array
        (
            [0] => sokanacademy
            [1] => sokanacademy
            [2] => sokanacademy
        )

)

می‌‌بینیم از آنجا که عملکرد فِلگ g در فانکشن ()preg_match_all گنجانده شده است، هر سه موردی که با الگوی موجود در رِجِکس هم‌خوانی داشتند در قالب یک آرایه در معرض دیدمان قرار گرفته‌اند.

online-support-icon