# زبان های اسکریپتی > PHP > تاپیک های آموزشی و دنباله دار >  آموزش گام به گام عبارات با قاعده

## reza_alie

بسم الله الرحمن الرحیم
باعرض سلام و ادب و احترام خدمت همه دوستان برنامه نویس
بنده در این تاپیک آموزشی قصد دارم عبارت منظم یاRegular Expression خدمت شما دوستان آموزش بدم امیدوارم که مورد پسند شما دوستداران phpواقع بشه.
(با اجازه مدیریت و همه استاتید محترم :قلب: )
نکته:------>ارسال spamممــــــنوع

تــشکر =رضــــایت

----------


## reza_alie

جلسه اول:
*مفهوم عبارات منظم:*
از سایت ویکی پدیا



> در علوم رایانه، *عبارت باقاعده*، که تحت عنوان *regex* یا *regexp* (مخفف عبارت انگلیسی _regular expression_)  نیز نامیده می‌شود به معنی تطبیق رشته در متن است، که از قبیل نویسه‌های  خاص، کلمات و الگوهایی از نویسه‌ها می‌باشد. یک عبارت باقاعده با زبان  معمولی نوشته می‌شود که می‌تواند توسط یک پردازشگر عبارت باقاعده، یا یک  برنامه که به عنوان تولیدکنندهٔ مترجم یا بررسی‌کنندهٔ متن و تشخیص قسمت‌هایی از آن به وسیلهٔ مشخصات استفاده شود.
> 
>  این نمونه‌ها می‌توانید قابلیت‌ها محدودی که عبارت با قاعده می‌تواند انجام دهد را نشان دهد:
> 
> دنباله‌ای از نویسه‌های «car» در هر متن، از قبیل «car»، «cartoon» یا «bicarbonate»لغت «car» در زمانی که به صورت جداگانه استفاده شودلغت «car» وقتی که قبل از «blue» یا «red» آمده باشدیک نویسهٔ «$» که پس از آن یک یا چند رقم بیاید و پس از آن به صورت  اختیاری یک ممیز بیاید و پس از ممیز دقیقاً دو رقم اضافه قرار داشته باشد  (مانند ‎ «$۱۰»‎ یا ‎ «$۲۴۵٫۹۹»‎)
>  عبارت‌های باقاعده می‌توانند خیلی پیچیده‌تر از این مثال‌ها باشند.


یا علی 
موفق باشید

----------


## reza_alie

*جلسه دوم
نحوه نوشتن عبارات منظم در php:*

دستورات در این روش از طریق توالی علامت ها، کلمات، حروف یا کاراکترهای  خاصی (مانند [] () + \ *? | , w \W\ 0-9 a-z و...) که هر کدومشون مفهوم  خاصی دارن ، تعریف می شن، در واقع از کنار هم قرار گرفتن این علامت ها،  دستور ویژه ای شکل گرفته و قسمت خاصی از رشته مورد نظر استخراج یا بررسی می  شه.
مثال:
به عنوان مثال ما می خواهیم به دنبال reza در عبارت  reza_ali in barnamenevis.org بگردیم ببیم اصلا عبارت rezaدر reza_ali in barnamenevis.org وجود دارد یا نه؟
برای این کار ما از تابع preg match استفاده می کنیم:
کد:

<?php
$str = "reza_ali in barnamenevis.org";
echo preg_match('/reza/', $str); // output=1
?>


نکته:رشته ای که به دنبال آن می گردیم را در بین //قرار می دهیم
نکته2:این تابع حساس به حروف کوچک و بزرگ است
اگه بخواهیم تابع حساس به حروف کوچک و بزرگ نباشد باید به صورت زیر بنویسیم:

<?php
$str = "reza_ali in barnamenevis.org";
echo preg_match('/REza/i', $str); // output=1
?>
موفق باشید
تشکر =رضایت

----------


## reza_alie

*جلسه سوم:
*به نام خدا
برای تفهیم بیشتر به مثال زیر توجه کنید:

<?php
$string = "Reza_ali in https://barnamenevis.org";
echo preg_match('/Reza/', $string); //result is 0
echo preg_match('/Reza/i', $string); //result is 1
?>

حال به نظر شما اگر بخواهیم عدد و حروف رو کنار هم استفاده کنیم چی کار بکنیم؟
*خوب کاری نداره که به صورت زیر عمل می کنیم:

<?php
$string = "1234reza556";
$check = preg_match('/reza556/', $string); // Result is 1
echo $check;
?>

*خروجی 1می باشد
حال به مثال زیر توجه کنید:


<?php
$string = "1234Reza556";
$check = preg_match('/reza556/', $string);
echo $check;
?>

خروجی صفر می باشد برای این که حساس به حروف کوچک و بزرگ می باشد برای این که به حروف کوچک و بزرگ حساس نباشدکاراکترiرا بعد از /قرار می دهیم به صورت زیر:

<?php
$string = "1234Reza556";
$check = preg_match('/reza556/i', $string);
echo $check;
?>

یاعلی 
موفق باشیدتشکر=رضایت

----------


## reza_alie

با عرض معذرت به علت انجام پروژه طی روز های آینده این آموزش ادامه پیدا می کند
موفق باشید

----------


## reza_alie

*سلام خدمت دوستان در این بخش از آموزش کاراکتر براکت [] رو بررسی میکنیم.
*

*قلاب، کروشه یا bracket* کاراکتر دیگری هست که در دستورات با قاعده  کابرد زیادی داره، این کاراکتر در نقش دستوری ، یه کاراکتر محدود ساز هست. و  فقط کاراکترهای خودشو شامل می شه (در حالت عادی حساس به حروف بزرگ و کوچک  هم هست)، فرض کنید [a] تنها شامل رشته ای می شه که دست کم حرف a در آن به  کار رفته باشه.

*-> برا تفیهم بیشتر چند نمونه میارم :*

*[a] »*

شامل رشته ای می شه که حداقل a در آن به کار رفته باشه، مانند abcd , aadc ,  bafc و... (به طور مثال شامل bnv ، 232، ccczو... نمی شه).

*[zxn] »*

 شامل رشته ای می شه که دست کم z *یا* x *یا* n در آن به کار رفته باشه، مثهxzn، regex، zend و... (به طور مثال شامل ZXN، abc، 123 و... نمی شه).

*[a-z] »*

 شامل رشته ای می شه که دست کم حروف a *تا* z (الفبای انگلیسی با حروف *کوچک*) در اون به کار رفته باشه، مانند Php، Regex، bBbb و... (به طور مثال شامل 1@122،  REGEX، 12223 و... نمی شه).

*[A-Z] »*

 شامل رشته ای می شه که دست کم حروف A *تا* Z (الفبای انگلیسی با حروف *بزرگ*) در اون به کار رفته باشه، مانند PHP، ReGex، BCBBB و... (به طور مثال شامل abbcc، 1223، aca و... نمی شود).

*[0-9] »*

 شامل رشته ای می شه که دست کم اعداد 0 *تا* 9 در اون به کار رفته باشه، مثه 35CC، 666، b122 و... (به طور مثال شامل abcd، p%@&*، aa و... نمی شه).

*[abct-z] »*

 شامل رشته ای می  شه که حداقل حرف a *یا* b *یا* c *یا* t *تا* z  در اون به کار رفته باشه (دقت کنید که در اینجا چون توالی حروف انگلیسی  بهم خورده، علامت - از حرف t به بعد را شامل می شه)، مانند You، bb، abc  و... (به طور مثال شامل Yo، 142، de و... نمی شه).

*نکات »*
*نکته 1:*
 	 		 			 			 				 همون طور که در دستورات بالا دیدید، علامت - یک کاراکتر همراهی کننده  در عبارات با قاعده (یعنی در کنار سایر علامت ها استفاده می شه) و به معنی "*تا*" هست. 			 		


*نکته 2:*
 	 		 			 			 				 علامت - در صورتی که در ابتدا یا انتهای دستور قرار بگیره، خاصیت  دستوری خودشو از دست می ده، به طور مثال [az-] شامل a یا z یا علامت - می  شه(همچنین [-az]). 			 		


*نکته 3:* 
 	 		 			 			 				علامت [ یا ] چنانچه بلافاصله بعد از اولین قلاب قرار بگیره، حالت  دستوری خودشو از دست می ده، به طور مثال [zxn[] شامل z یا x یا n و یا  علامت [ می شه. 			 		




یا علی 
موفق باشید

----------


## reza_alie

*سلام خدمت دوستان.

اعیاد شعبانیه بر همه دوستان مبارک  باد

در این قسمت از آموزش کاراکتر [^] رو بررسی میکنیم.*

در قسمت قبل به بررسی کاراکتر [] پرداختیم و گفتیم که این کاراکتر یه نوع محدود کننده هست در نقش دستوری.

*حال به بررسی کاراکتر [^] میپردازیم.*


در کنار کاراکتر کروشه (قلاب)، کاراکتر کروشه و علامت ^ وجود داره که برعکس  حالت قبل هست.یعنی هر کاراکتری جز آنچه درون قلاب تعریف شده است.
 به فرض [m^] شامل رشته ای میشه که به جزء حرف m، کاراکتر دیگه ای توی اون  باشه (اگر تنها حرف m باشد، نتیجه FALSE خواهد بود)، یا [acd^] شامل رشته  ای می شه که جز حروف a و c و d، کاراکتر دیگه ای نیز داشته باشه.

چند مثال میزنم :

*[a^] :* 
شامل رشته ای می شه که به جز a، کاراکتر دیگه ای در اون به کار رفته باشه،  مثه abcd، bagd، accab و... (به طور مثال شامل aaaa، a، aaa و... نمی شه).

*[msn^] :*
 شامل رشته ای می شه که به جز m و s و n، کاراکتر دیگه ای در اون به کار  رفته شه ، مانند MSN، MASEN، و... (به طور مثال شامل msn، snnn، mmmو...  نمی شه).

*[a-z^] :*
 شامل رشته ای می شه که به جز حروف a *تا* z (الفبای انگلیسی با حروف *کوچک*)،  کاراکتر دیگه ای در اون به کار رفته شه، مثه Php، mahdiHidden،  ashiyane1و... (به طور مثال شامل php، mahdihidden، bbbb و... نمی شود).

*[A-Z^] :*
 شامل رشته ای می شه که به جز حروف A *تا* Z (الفبای انگلیسی با حروف *بزرگ*)،  کاراکتر دیگه ای در اون به کار رفته باشه، مانند Php، MAHDIHIdDEN،  ASHIYANeو... (به طور مثال شامل PHP، ASHIYANE، MAHDIHIDDENو... نمی شه).

*[0-9^] :*
 شامل رشته ای می شه که به جز اعداد 0 *تا* 9، کاراکتر دیگه ای توی اون به کار رفته باشه، مانند 44vC، 22&، m112و... (به طور مثال شامل 222، 555، 123 و... نمی شه).

* :[abct-z^]* 
 شامل رشته ای می شه که به جز حرف a *و* b *و* c *و* t *تا* z (با حروف *کوچک*)، کاراکتر دیگه ای در اون به کار رفته باشه، مانند You، b&b، ab1c و... (به طور مثال شامل u، bb، abc و... نمی شه).
*نکته:*
                                                          به حساس بودن دستورات به حروف بزرگ و کوچک دقت کنید.                      





یاعلی
موفق باشید

----------


## reza_alie

*سلام خدمت دوستان.

در این قسمت ازآموزش  کاراکتر ^ (hat) رو بررسی میکنیم:*

در قسمت قبل به بررسی کاراکتر [^] پرداختیم . در این قسمت کاراکتر ^ (hat) به تنهایی رو مورد بررسی قرار میدیم .

*کاراکتر ^ (شروع) »*

علاوه بر استفاده از کاراکتر ^ (hat) در داخل کروشه، این کاراکتر به تنهایی  نیز در دستورات مربوط به عبارات با قاعده کاربرد فراوان داره.

علامت ^ (*خارج* از قلاب و در *شروع* دستور) به معنی نقطه شروع یک رشته هست، به طور مثال دستور mha^ به معنی هر عبارتی هست که از ابتدا با mha شروع شده باشه؛

بنا بر این رشته ای مثه mha را شامل می شه، اما abcd رو خیر (چون عبارت اول دقیقا با mha شروع شده اما عبارت دوم با abc)/.

مثال برای تفهیم بیشتر :

 <?php
$string = 'Rexeg Is Easy!';
$check = preg_match('/^Rexeg/', $string);
echo $check;
?>  




خروجی دستور بالا برابر 1 یا TRUE خواهد بود، چون عبارت دقیقا با php شروع شده، اما اگه کد به این شکل بود:

 <?php
$string = 'why Rexeg Is Easy!';
$check = preg_match('/^Rexeg/', $string);
echo $check;
?>  


خروجی برابر 0 یا FALSE هست، چون در دستور تنها رشته ای رو در نظر گرفتیم  که از شروع با عبارت Regex باشه، در حالی که شروع رشته ما با عبارت فرضی  why است.

*نکته:* 
 	 		 			 			 				همون طور که پیش از این ملاحظه کردید، کاربرد علامت ^ درون قلاب با حالت عادی متفاوت است. 			 		


موفق باشید
تشکر = رضایت

----------

