بکندباز

آموزش RegEx – معرفی

لیست تمام سرفصل ها در: آموزش PHP
در طول آموزش سعی می شود از نام های انگلیسی اصلی متغیر ها و اصطلاحات بیشتر استفاده شود تا برای استفاده در منابع خارجی نیز به شما کمک کند.

RegEx یا Regular Expression چیست؟

RegEx دنباله ای از کاراکتر هاست که یک الگو برای جستجو ایجاد می کنند. هنگامی که می خواهید دنبال یک کلمه داخل یک متن بگردید می توانید از این الگو برای توصیف کلمه کلیدی خود استفاده کنید.

این RegEx می تواند یک تک کاراکتر باشد یا یک الگوی خیلی پیچیده.

RegEx ها در PHP، یک رشته ی متنی هستند که از محدود کننده ها، یک الگو و چند پ اصلاح کننده دلخواه تشکیل می شوند.

$exp = "/w3schools/i";

در مثال بالا، / یک محدود کننده است. w3schools یک الگو است که قرار است جستجو شود و i یک اصلاح کننده است که باعث می شود جستجو حساس به کوچک و بزرگی حروف باشد.
کاراکتر محدود کننده می تواند هر کاراکتری باشد به جز حروف، اعداد، \ و فاصله. مرسوم ترین کاراکتر محدود کننده / است، اما وقتی الگوی شما شامل محدود کننده ی / است، به سادگی می توانید محدود کننده های دیگری مثل # یا ~ را نیر انتخاب کنید.

توابع مربوط به RegEx ها

PHP توابع متنوعی برای استفاده از RegEx ها در اختیار شما قرار می دهد. توابع ()preg_match و ()preg_match_all و ()preg_replace کاربردی ترین توابع هستند.

preg_match()‎ : در صورتی که الگو در متن پیدا شود 1 و در غیر اینصورت 0 برمی گرداند
preg_match_all()‎ : تعداد باری که الگو در متن پیدا شده را برمی گرداند که این عدد می تواند صفر باشد
preg_replace()‎ : یک متن جدید برمی گرداند که در آن کلمه مطابق با الگو با کلمه ای دیگر جایگزین شده است

کاربرد تابع ()preg_match

این تابع به شما می گوید که آیا متن شامل کلمه ای که با الگو مطابقت داشته باشد هست یا خیر.

مثال:

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

کاربرد تابع ()preg_match_all

این تابع به شما می گوید که چند بار الگو در متن پیدا شده است:

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

کاربرد تابع ()preg_replace

این تابع همه ی کلمات یافته شده ی مطابق با الگو را با کلمه ای دیگر جایگزین می کند:

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

اصلاح گرها در RegEx

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

  • i : جستجوی غیر حساس به کوچک و بزرگی حروف
  • m: معنی Performs a multiline search (patterns that search for the beginning or end of a string will match the beginning or end of each line)
  • u: معنی Enables correct matching of UTF-8 encoded patterns

الگو های RegEx

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

  • [abc]: معنی Find one character from the options between the brackets
  • [^abc]: معنی Find any character NOT between the brackets
  • [0-9]: معنی Find one character from the range 0 to 9

متاکاراکتر ها

متاکاراکتر ها کاراکتر هایی هستند که معنای خاصی دارند.

Metacharacter Description
| Find a match for any one of the patterns separated by | as in: cat|dog|fish
. Find just one instance of any character
^ Finds a match as the beginning of a string as in: ^Hello
$ Finds a match at the end of the string as in: World$
\d Find a digit
\s Find a whitespace character
\b Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b
\uxxxx Find the Unicode character specified by the hexadecimal number xxxx

شمارشگر ها

<table class="w3-table-all notranslate">
  <tbody><tr>
    <th style="width:22%">Quantifier</th>
    <th>Description</th>
  </tr>
  <tr>
    <td>n+</td>
    <td>Matches any string that contains at least one <em>n</em></td>
  </tr>
  <tr>
    <td>n*</td>
    <td>Matches any string that contains zero or more occurrences of <em>n</em></td>
  </tr>
  <tr>
    <td>n?</td>
    <td>Matches any string that contains zero or one occurrences of <em>n</em></td>
  </tr>
  <tr>
    <td>n{x}</td>
    <td>Matches any string that contains a sequence of <i>X</i> <i>n</i>'s</td>
  </tr>
  <tr>
    <td>n{x,y}</td>
    <td>Matches any string that contains a sequence of X to Y <i>n</i>'s</td>
  </tr>
  <tr>
    <td>n{x,}</td>
    <td>Matches any string that contains a sequence of at least X <i>n</i>'s</td>
  </tr>
</tbody></table>

توجه: اگر در الگویتان می خواهید دنبال یکی از کاراکتر های خاص بگردید یک علامت \ به قبل از آن اضافه کنید. برای مثال برای جستجوی علامت ? در متن از آنجایی که ? خودش جزو کاراکتر های خاص است بایستی یک علامت \ به قبل از آن اضافه کنید.

$pattern = '/\?+/';

گروه بندی

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

<?php
$str = "Apples and bananas.";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str); // Outputs 1
?>

لیست کامل توابع RegExp:
https://www.w3schools.com/php/php_ref_regex.asp

zohreh

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*