آموزش عبارات منظم در php

Ratings
(0)

عبارت منظم(Regular Expression) چیست؟

عبارت منظم(regular expression) به دنباله ای از کاراکترها(حروف) گفته می شود که یک الگوی جستجو را مشخص می کند. وقتی که ما در یک متن(text) داده ای را جستجو می کنیم، می توانیم از عبارات منظم برای تعیین اینکه به جستجوی چه چیزی می پردازیم، استفاده کنیم.

یک عبارت منظم، می تواند یک کاراکتر(حرف) تکی باشد یا اینکه یک الگوی پیچیده تر را مشخص کند. از عبارات منظم می توانیم برای انجام انواع جستجوهای متنی و عملیات جایگزینی های متنی استفاده کنیم.

 


شیوه ی نوشتن یا سینتکس

عبارات منظم در php، رشته هایی هستند که از  جدا کننده ها(delimiters)، و یک الگو(pattern) و اصلاحگرهای اختیاری(optional modifiers) تشکیل می شوند. 

$exp = "/w3schools/i";

 در مثال بالا، علامت / یک جداکننده است و عبارت w3schools یک الگو است که آن را جستجو می کنیم و i یک اصلاحگر است که باعث می شود جستجوی ما به حروف بزرگ و کوچک حساس نباشد(case-insensitive).

 جدا کننده در عبارات منظم، می تواند هر چیزی باشد به جز حرف، عدد، بک اسلش یا فاصله ی سفید. متداول ترین جدا کننده، علامت اسلش(/) است، اما وقتی که الگوی(pattern) ما حاوی اسلش باشد،بهتر است که از یک جدا کننده ی دیگر، مثل علامت # یا علامت ~ استفاده کنید. 

 


توابع عبارات منظم

 در php تابع هایی وجود دارد که به ما امکان می دهد تا از عبارات منظم استفاده کنیم. از تابع های preg_match() و preg_match_all() و preg_replace() به صورت متداول در این زمینه استفاده می شود.

 

تابع توضیحات
preg_match() اگر الگو(pattern) در رشته ی مورد نظر پیدا شود، 1 را برمی گرداند و در غیر این صورت 0 را برمی گرداند.
preg_match_all() این تابع، تعداد دفعاتی که الگو(pattern)در داخل رشته ی مورد نظر پیدا شده است را مشخص می کند که شامل 0 نیز می شود.
preg_replace() این تابع، در داخل یک رشته، به دنبال یک الگو(pattern) می گردد و آنها را با یک عبارت دیگر جایگزین می کند.

 


استفاده از تابع preg_match() در php

تابع preg_match() به ما کمک می کند تا بفهمیم آیا یک رشته، حاوی تطابق های یک الگو(pattern) است یا نه.

مثال:

استفاده از یک عبارت منظم برای جستجوی عبارت "w3schools" در یک رشته، به صورت غیر حساس به حروف بزرگ و کوچک(case-insensitive):

<!DOCTYPE html>
<html>
<body>

<?php
  $str = "Visit W3Schools";
  $pattern = "/w3schools/i";
  echo preg_match($pattern, $str); 
?>

</body>
</html>

 نتیجه:

1

 


استفاده از تابع  preg_match_all() در php

تابع preg_match_all() به ما نشان می دهد که یک الگو(pattern) چند بار در یک رشته(string)، مورد تطابق قرار گرفته است.

مثال:

 استفاده از عبارات منظم برای شمارش تعداد تطابق های عبارت "ain" در یک رشته(string) به صورت غیر حساس به حروف بزرگ و کوچک:

<!DOCTYPE html>
<html>
<body>

<?php
  $str = "The rain in SPAIN falls mainly on the plains.";
  $pattern = "/ain/i";
  echo preg_match_all($pattern, $str);
?>

</body>
</html>

 نتیجه:

4

 


 استفاده از تابع preg_replace() در php

تابع preg_replace() تمام تطابق های پیدا شده ی یک الگو(pattern) در یک رشته، را با یک رشته ی دیگر جایگزین می کند.

مثال:

استفاده از یک عبارت منظم غیر حساس به حروف بزرگ و کوچک، برای جایگزین کردن عبارت Microsoft با W3Schools در یک رشته:

<!DOCTYPE html>
<html>
<body>

<?php
  $str = "Visit Microsoft!";
  $pattern = "/microsoft/i";
  echo preg_replace($pattern, "W3Schools", $str);
?>

</body>
</html>

 


اصلاحگرهای عبارات منظم

اصلاحگرها می توانند چگونگی انجام یک جستجو را مشخص کنند.

اصلاحگر توضیحات
i یک جستجوی غیر حساس به حروف بزرگ و کوچک را انجام می دهد.
m  این اصلاحگر، یک جستجوی چند خطی را انجام می دهد.
u  این اصلاحگر باعث می شود که الگو و رشته ی مورد نظر، به صورت UTF-8 در نظر گرفته شوند.

 


الگوهای عبارات منظم

از براکت ها، برای پیدا کردن یک محدوده از کاراکترها استفاده می شود.

عبارت توضیحات
[abc]

از این عبارت برای پیدا کردن یک کاراکتر از بین آنچه که بین براکت ها قرار دارد، استفاده می شود.

[^abc]

از این عبارت برای پیدا کردن کاراکترهایی استفاده می شود که بین براکت ها قرار ندارند.

[0-9]

از این عبارت برای پیدا کردن یک کاراکتر از 0 تا 9 استفاده می شود.

 


کاراکترهای متا(Metacharacters )

متاکاراکتر توضیحات
|

پیدا کردن یک تطابق برای هر یک از الگوهای مشخص شده توسط علامت | مانند عبارت cat|dog|fish .

.

پیدا کردنِ هر کاراکتر.

^

 Finds a match as the beginning of a string as in: ^Hello

یک تطابق را پیدا می کند که در ابتدای یک رشته قرار داشته باشد مانند: Hello^

$

یک تطابق را در انتهای رشته ی مورد نظر پیدا می کند مانند: World$

\d

یک رقم را پیدا می کند.

\s

یک کاراکتر فاصله ی سفید(whitespace) را پیدا می کند.

\b

یک تطابق را در ابتدای یک کلمه مانند bWORD\ یا در انتهای یک کلمه، مانند WORD\b پیدا می کند.

\uxxxx

پیدا کردن یک کاراکتر یونیکد(Unicode) که به وسیله ی یک عدد هگزادسیمال xxxx مشخص می شود.

 


استفاده از کمیت سنج‌ها(Quantifiers) در PHP

کمیت سنج‌ها، مقادیر(quantities) را تعریف می کنند:

کمیت سنج(Quantifiers) توضیحات
n+

 هر رشته ای که حاوی حداقل یک n باشد را مورد تطابق قرار می دهد.

n*

 هر رشته ای که حاوی صفر یا تعداد بیشتری n باشد را مورد تطابق قرار می دهد.

n?

 هر رشته ای که حاوی صفر یا یک تطابق از n باشد را مورد تطابق قرار می دهد.

n{x}

 هر رشته ای که حاوی X دنباله از n باشد را مورد تطابق قرار می دهد.

n{x,y}

 هر رشته ای که حاوی دنباله ی X تا Y از n باشد را مورد تطابق قرار می دهد.

n{x,}

هر رشته ای که حاوی یک دنباله باشد که حداقل X تا n داشته باشد را مورد تطابق قرار می دهد.

 


نکته: اگر عبارت شما نیاز دارد تا یک کاراکتر خاص(special characters) را جستجو کند، می توانید از یک بک اسلش(\) بعنوان کاراکتر گریز(escape) استفاده کنید. بعنوان مثال، در جستجوی یک یا چند علامت سوال، می توانیم از عبارت زیر استفاده کنیم:

$pattern = '/\?+/';

 


 گروه بندی در عبارات منظم

برای اعمال کمیت سنج ها(quantities) در سراسر الگوها(patterns)، می توانید از پرانتزها ( ) استفاده کنید. پرانتزها همچنین می توانند برای انتخاب بخش هایی از الگو(patterns) مورد استفاده قرار گیرند تا بعنوان یک تطابق(match)، مورد استفاده قرار گیرند.

مثال : استفاده از گروه بندی برای کلمه ی banana با جستجو برای ba که پس از آن، دو تا na قرار گرفته باشند:

<?php
 $str = "Apples and bananas.";
 $pattern = "/ba(na){2}/i";
 echo preg_match($pattern, $str); // خروجی این کد 1 است
?> 

خروجی:

1

منبع1: سایت W3schools

 منبع 2: سایت PHP

 

  • بازدید: 472

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال