يك عبارت منظم دنباله از كراكترهاست كه يگ الگوي جستجو را شكل ميدهد .هنگاميكه مي خواهيد اطلاعاتي را در متني جستجو نمائيد، الكو(pattern) براي آن تنظيم ميشود .از الگوي تنظيمي براي جستجوي اطلاعات مورد نظر استفاده ميشود.
عبارت منظم ميتواند يك كراكتريا يك عبارت پيچيده تر باشد .اين عبارت براي عمليات جستجو و جانشيني بكار گرفته ميشود.
درPHP عبارت منظم تركيبي از علائم جداكننده واصلاح كننده اختياري ميباشند .بعنوان مثال نمونه زير
درمثال بالا كراكتر /
بعنوان جداكننده متنW3schools و كراكتر
i
بعنوان اصلاح كننده، در نظر گرفته شده اند.
يك جداكننده(delimiter)ميتواندهر كراكتري بجز حروف ، اعداد، بك اسلش وبلنك باشد عموما كراكتر/ بيشتر بعنوان جدا كننده در نظر ميگيرند .اما ازكراكترهاي$ و ~هم ميتوان استفاده نمود.
توابع متعددي براي كا ركردن با عبارات منظم وجود دارد .در بين توابع
preg_match_all()
، preg_match()
preg_replace()
،
بيشتر كاربرد دارند . شرح مختصر مطابق جدول زير
تابع | شرح مختصر |
---|---|
preg_match() | در صورتيكه متن منظم در عبارت رشته اي وجود داشته باشد، عدد يك و در غير اينصورت .عدد صفر را برگشت ميدهد |
preg_match_all() | .تعداد دفعاتيكه متن الگو در عبارت رشته اي وجود دارد، برگشت ميشود |
preg_replace() | .عمل جانشيني در عبارت رشته اي براي موارد مشابه الگو انجام شده و نتيجه بر گشت ميشود |
اين تابع براي كنترل وجود متني در يك عبارت رشته ايست.
مثال ـ در اين مثال عبارت"w3schools"در رشته"Visit W3shcools"جستجو ميشود .البته حروف بزرگ وكوچك بخاطرi درالگو،يكسان منظور ميشود
<?php $str = "Visit W3Schools"; $pattern = "/w3schools/i"; echo preg_match($pattern, $str); // Outputs 1 ?>
اين تابع تعداد دفعاتي كه يك الگو در يك عبارت رشته وجود دارد بر ميگرداند.
مثال ـ در اين مثال در يك شمارش غيرحساس درحروف، تعداد دفعاتيكه متن"ain"در رشته زير وجود دارد، برميگرداند.
"The rain in SPAIN falls mainly on the plains,"
<?php $str = "The rain in SPAIN falls mainly on the plains."; $pattern = "/ain/i"; echo preg_match_all($pattern, $str); // Outputs 4 ?>
تابع فوق بصورت كلي بفرم زير ميباشد.
preg_replace( pattern,str_rep,str_source)
اين تابع متن الگو يعنيpattern را درstr_source جستجو نموده وعبارتstr_rep را جانشين كرده و نتيجه را برميگرداندstr_source.هيچ تغييري نميكند.
مثال ـ درعبارت"Visit Microsoft!"بجاي"microsoft" عبارت"W3school" قرار ميگيرد.
<?php $str = "Visit Microsoft!"; $pattern = "/microsoft/i"; echo preg_replace($pattern, "W3Schools", $str); // Outputs "Visit W3Schools!" ?>
اصلاح كننده هاي الگو باعث تغيير در رفتار تابع براي جستجوخواهد شد .اصلاح كننده ها مطابق زير ميباشند.
iـ براي غيرحساس بودن حروف.در چنين حالتي تفاوتي بين حروف كوچك وبزرگ نيست
mـ جستجو در خطوط كامل متن را فعال ميكند .بصورت عادي جستجو در يك خط متن ميباشد.
uـ قادر ميسازد كه الگوي جستجو با UTF-8 تطبيق نمايد
الگوي براكتي جستجو باعث مشخص شدن دامنه كراكترها در الگو، براي جستجو ميشود.جدول اين موارد مطابق زيراست.
عبارت جستجو | شرح |
---|---|
[abc] | 1 حد اقل يك كراكتر درمتن پيداشود كه دربراكت باشد برگشت |
[^abc] | پيدا نمودن كراكتركه در براكت نباشد |
[0-9] | پيدانمودن يك عدد در متن |
كراكتر هاي خاصي هستند كه اگر در متن جستجو(pattern) قرار گيرند، بعنوان نشانه كاري در روند جستجو مطرح ميكنند. بعنوان مثال\d براي مجموعه ارقام يعني0 تا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 |
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n's |
n{x,y} | Matches any string that contains a sequence of X to Y n's |
n{x,} | Matches any string that contains a sequence of at least X n's |
نكته ـ اگر نياز به جستجوي كراكترهاي خاص داريد ، ميتوانيد با قرار دادن\ قبل ازآن در الگوي جستجو، اينكار انجام دهيد. بعنوان مثال براي پيدا كردن ?بايد الگو بصورتpattern="/\+/?"باشد.
براي گروه بندي در الگواز( ) استفاده ميشود و تكرار گروه در الگوبا { n}بدنبال گروه ذكر ميشودn . بعنوان تعداد تكرار ميباشد .در اين مثال الكو بصورت "/ba(na){2}/i"بوده كه مشابه"/banana/i"ميباشد
مثال ـ گروه بندي در الگو
<?php $str = "Apples and bananas."; $pattern = "/ba(na){2}/i"; echo preg_match($pattern, $str); // Outputs 1 ?>