رگولار اکسپرژن

saalek110

Well-Known Member

رگولار اکسپرشن به زبان ساده برای برنامه نویس ها​


رگولار اکسپرشن (Regular Expression) بخشی از یک متن را که با یک الگو مطابقت دارد پیدا می کند. فرض کنید به عنوان یک توسعه دهنده وب می خواهید متن درون یک لینک را استخراج کنید:
<a href=”http://sample.com”>متن درون لینک</a>
بسیار خوب فرض کنید که در شرایطی با این مسئله مواجه می شوید که امکان استفاده از document.querySelector('a').innerText وجود ندارد؛ آیا راه حلی برای این مسئله به ذهن شما می رسد؟ یا فرض کنید می خواهید در یک صفحه html به دنبال تمام ایمیل ها بگردید. ممکن است در هر جایی از صفحه حتی لابه لای کدهای جاوا اسکریپت، یک ایمیل وجود داشته باشد.
در واقع شما فقط این را می دانید که ایمیل چه الگویی دارد یا در مثال قبل شما فقط می دانید که متن درون یک تگ a به <a/> ختم می شود و پس از <... a> شروع می شود. بنابراین در چنین شرایطی باید از رگولار اکسپرشن استفاده کنیم چون فقط با دانستن الگوی چیزی که دنبال آن هستیم می توانیم تمام موارد مورد انطباق را پیدا کنیم.
شما به عنوان توسعه دهنده وب در موارد زیادی به رگولار اکسپرشن ها نیاز پیدا خواهید کرد:

  • اعتبارسنجی ورودی های فرم واضح ترین کاربرد آن است. شما نمی خواهید کاربران در فیلد مربوط به ایمیل هر چیزی وارد کنند؛ بلکه باید قبل از ارسال فرم یا در پردازش آن در سمت سرور ورودی ها را چک کرده و از انطباق ورودی ها با الگوهای مورد پذیرش شما اطمینان پیدا کنید.
  • پردازش متن در کاربردهایی مثل web scraping ؛ مثلا فرض کنید می خواهید یک کرالر بنویسید که در مجموعه ای از وب سایت ها برگردد و در صفحات تماس با ما اگر ایمیل یا شماره تماس پیدا کرد آن را برای شما استخراج کند.
یادگیری رگولار اکسپرشن معمولا با سختی هایی همراه است و برنامه نویس ها معمولا دل خوشی ای از این بخش ندارند..........

منبع:
 

saalek110

Well-Known Member
لطفا به سایت:


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


رگولار اکسپرشنز را وارد می کنید تا در متن پایین جستجو کند و نتایج را هایلایت کند. نیازی به تایپ کردن اسلش ها و کارکتر های ^ و $ وجود ندارد. جهت سادگی، شما فقط بدنه ی رگولار اکسپرشن را وارد می کنید. همانطور که مشاهده می کنید، این بهترین ابزار آموزش رگولار اکسپرشن می باشد.

منبع:
regexr.png
 

saalek110

Well-Known Member
خوب، این اکسپرشن را ببینید:

/^[a-z]+_file.php$/

می گوید که فایل هایی مانند thisismy_file.php را پیدا کن. ولی این الگوریتم نمی تواند رشته ای مثل this_is_my_file.php را پیدا کند، زیرا در کلاس کاراکتر، فقط حروف a تا z تعریف شده اند. اگر آندرلاین را نیز می خواهیم، می توانید پس از z آندرلاین را نیز اضافه کنید. همچنین اگر نیاز به حروف آپرکیس (مثل A) دارید، باید شرط A-Z را نیز اضافه کنید:

/^[a-zA-Z_]+_file.php$/

اکنون این اکسپرشن می تواند فایل هایی مثل that_IS_my_file.php را پیدا کند. می توانید اینرا در تول ریجکس آر تست کنید.


 

saalek110

Well-Known Member
یک توضیحی برای کاربرانی که هنوز آشنایی با این موضوع ندارند:

عبارات منظم (Regular Expressions) وسیله ای را برای برنامه نویسان فراهم می کنند که بتوان به کمک آنها عبارات ، کلمه ها و الگوها ی مورد نظر را در یک رشته متنی (String) پیدا کرد.


Regular Expressions دارای یک سری سینتکس های مربوط به خود است که به کمک آن می توان تنها با نوشتن یک خط کد، یک رشته ی بزرگ متنی را تحلیل و جستجو کرد در حالی که اگر از روشهای دیگری استفاده می کردیم به احتمال خیلی زیاد از یک خط تجاوز می کرد . و این سادگی و در عین حال کارایی بالای این روش را می رساند .


Regular Expressions محدود به یک زبان خاص نیست و اکثر زبانهای برنامه نویسی این امکان را درون خود قرار داده اند . عبارات منظم توسط یک پردازنده که درون زبان برنامه نویسی وجود دارد تفسیر (interpret) می شوند .


عبارات منظم استفاده های زیادی در برنامه های کاربردی مختلف دارد . توسط بسیاری از ادیتورها (Text Editor) برای انجام اعمال مختلف بر روی رشته ها مورد استفاده قرار می گیرد . همچنین در بعضی از زبانهای برنامه نویسی نیز از موتور Regular Expressions استفاده می شود (نظیر Perl,Ruby,TCL)


اصل Regular Expressions بر روی نظریه ماشینها و نظریه زبانهای صوری تکیه دارد .


جدول زیر نمونه ای از سینتکس های Regular Expressoins می باشد .




[]
range specificication (e.g., [a-z] means a letter in the range a to z)
\w
word character; same as [0-9A-Za-z_]
\W

non-word character
\s
space character; same as [ \t\n\r\f]
\S

non-space character
\d
digit character; same as [0-9]
\D

non-digit character
\b
backspace (0x08) (only if in a range specification)
\b
word boundary (if not in a range specification)
\B
non-word boundary
*
zero or more repetitions of the preceding
+
one or more repetitions of the preceding
{m,n}
at least m and at most n repetitions of the preceding
?
at most one repetition of the preceding; same as {0,1}
|

either preceding or next expression may match
()
grouping


منبع:
 

saalek110

Well-Known Member

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

saalek110

Well-Known Member

یک سری کاراکترها را اینجا شرح داده و از تابع preg_match هم استفادا کرده.


و با کد
PHP:
<?php
$str = 'image22.jpg';
$check = preg_match('/([a-z]+[0-9]*)\.jpe?g$/', $str, $match);
echo $check;
print_r($match);
//echo $match[1];
?>
PHP:
1Array ( [0] => image22.jpg [1] => image22 )
کار کرده.
 
آخرین ویرایش:

saalek110

Well-Known Member
از سایت بالا:


حروف (لاتین)​


اولین و ساده ترین مواد اولیه ای که در یک دستور Regex به کارمان می آید حروف ...abcd هستند، یعنی با قرار دادن آنها در یک دستور با قاعده، توالی از رشته متنی که شامل این کاراکترها باشد، انتخاب می شود، مثال:

PHP:
<?php
$str = 'abcdefg';
$check = preg_match('/abc/', $str);
echo $check;
?>
خروجی کد بالا عدد 1 خواهد بود، چون توالی عبارت abc در رشته abcdefg وجود دارد.
نکته: الزامی به رعایت ترتیب الفبایی نیست، مهم این است که توالی قسمت Regex در رشته متنی وجود داشته باشد.
 

saalek110

Well-Known Member
اعداد
اعداد 0 تا 9 و ترکیب آنها، دومین موادی است که می توانیم در یک دستور با قاعده از آنها استفاده کنیم، کاربرد ساده این کاراکترها مانند مثالی است که پیش تر ملاحظه کردیم:

PHP:
<?php
$str = '314276539';
$check = preg_match('/427/', $str);
echo $check;
?>

که خروجی برابر 1 خواهد بود.
 

saalek110

Well-Known Member
نقطه
کاراکتر بعدی که در عبارات با قاعده کاربرد دارد، نقطه یا dot است که به معنی هر کاراکتری (به جزء خط جدید) است، به طور مثال:
PHP:
<?php
$str = 'Regex is not too difficult!';
$check = preg_match('/Re.ex/', $str);
echo $check;
?>
خروجی کد بالا عدد 1 خواهد بود، اگرچه ما در دستور با قاعده از عبارت Re.ex استفاده کرده ایم، اما همان طور که گفتیم، نقطه در این دستورات شامل هر کاراکتری (به جزء خط جدید) می شود.
نکته: زمانی که بخواهیم کاراکتر نقطه از حالت دستوری (یعنی حالتی که شامل همه کاراکترها می شود) خارج و صرفا در نقش یک حرف (در نقش نقطه یا به اصطلاح literal) ظاهر شود، باید با یک بک اسلش (\) آن را درج کنیم، به این صورت اثر آن به عنوان یک کاراکتر دستوری از دست می رود، مثال:
PHP:
<?php
$str = 'Regex is not too difficult!';
$check = preg_match('/Re\.ex/', $str);
echo $check;
?>

که کد بالا خروجی 0 را چاپ می کند، چون .\ تنها شامل خود نقطه می شود نه کاراکتر دیگری (به عبارت دیگر اگر در رشته متنی، Regex برابر Re.ex بود، بررسی بالا عدد 1 را چاپ می کرد).
 

saalek110

Well-Known Member
براکت:
[ ] (دست کم یک کاراکتر)

bracket کاراکتر دیگری است که در دستورات با قاعده بسیار کاربرد دارد، این کاراکتر در حالت دستوری جزء علامت های محدود ساز است و تنها کاراکترهای خودش را شامل می شود (در حالت عادی حساس به حروف بزرگ و کوچک)، به فرض [a] تنها شامل رشته ای می شود که دست کم حرف a در آن به کار رفته باشد، چند نمونه از کاربرد این علامت:
[a] - شامل رشته ای می شود که دست کم a در آن به کار رفته باشد، مانند abcd، bacd، aaab و... (به طور مثال شامل bcd، 123، bbbb و... نمی شود).
[zxn] - شامل رشته ای می شود که دست کم z یا x یا n در آن به کار رفته باشد، مانند zxn، regex، zend و... (به طور مثال شامل ZXN، abc، 123 و... نمی شود).
[a-z] - شامل رشته ای می شود که دست کم حروف a تا z (الفبای انگلیسی با حروف کوچک) در آن به کار رفته باشد، مانند Php، javascript، Bbbb و... (به طور مثال شامل 1@2، JAVASCRIPT، 123 و... نمی شود).
[A-Z] - شامل رشته ای می شود که دست کم حروف A تا Z (الفبای انگلیسی با حروف بزرگ) در آن به کار رفته باشد، مانند PHP، JavaScript، BBBB و... (به طور مثال شامل abc، 123، aa و... نمی شود).
[0-9] - شامل رشته ای می شود که دست کم اعداد 0 تا 9 در آن به کار رفته باشد، مانند 49CC، 222، b123 و... (به طور مثال شامل 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 و یا علامت [ می شود.
 

saalek110

Well-Known Member
[ ^] (به جزء کاراکتر):
در کنار کاراکتر قلاب، کاراکتر قلاب و علامت ^ وجود دارد که برعکس حالت معمول، به معنی هر کاراکتری به جزء آنچه درون قلاب تعریف شده است می باشد، به فرض [a^] شامل رشته ای می شود که به جزء حرف a، کاراکتر دیگری در آن باشد (اگر تنها حرف a باشد، نتیجه FALSE خواهد بود)، یا [acd^] شامل رشته ای می شود که به جزء حروف a و c و d، کاراکتر دیگری نیز داشته باشد، به چند مثال توجه کنید:
[a^] - شامل رشته ای می شود که به جزء a، کاراکتر دیگری در آن به کار رفته باشد، مانند abcd، bacd، aaab و... (به طور مثال شامل aaaa، a، aa و... نمی شود).
[zxn^] - شامل رشته ای می شود که به جزء z و x و n، کاراکتر دیگری در آن به کار رفته باشد، مانند ZXN، regex، zend و... (به طور مثال شامل zxn، xnnn، zzz و... نمی شود).
[a-z^] - شامل رشته ای می شود که به جزء حروف a تا z (الفبای انگلیسی با حروف کوچک)، کاراکتر دیگری در آن به کار رفته باشد، مانند Php، Javascript، bbbb1 و... (به طور مثال شامل php، javascript، bbbb و... نمی شود).
[A-Z^] - شامل رشته ای می شود که به جزء حروف A تا Z (الفبای انگلیسی با حروف بزرگ)، کاراکتر دیگری در آن به کار رفته باشد، مانند Php، JavaScript، BBBb و... (به طور مثال شامل PHP، JAVASCRIPT، BBBB و... نمی شود).
[0-9^] - شامل رشته ای می شود که به جزء اعداد 0 تا 9، کاراکتر دیگری در آن به کار رفته باشد، مانند 49CC، 22%، b123 و... (به طور مثال شامل 000، 222، 123 و... نمی شود).
[abct-z^] - شامل رشته ای می شود که به جزء حرف a و b و c و t تا z (با حروف کوچک)، کاراکتر دیگری در آن به کار رفته باشد، مانند You، b&b، ab1c و... (به طور مثال شامل u، bb، abc و... نمی شود).
نکته: به حساس بودن دستورات به حروف بزرگ و کوچک دقت کنید.
 

saalek110

Well-Known Member
^ (شروع):
علاوه بر استفاده از کاراکتر ^ (hat) در درون قلاب، این کاراکتر به تنهایی نیز در دستورات مربوط به عبارات با قاعده کاربرد فراوان دارد، علامت ^ (خارج از قلاب و در شروع دستور) به معنی نقطه شروع یک رشته است، به طور مثال دستور bcd^ به معنی هر عبارتی است که از ابتدا با bcd شروع شده باشد، لذا رشته bcde را شامل می شود، اما abcd را خیر (چون عبارت اول دقیقا با bcd شروع شده اما عبارت دوم با abc)، چند مثال:
PHP:
<?php
$str = 'php is easy and powerful!';
$check = preg_match('/^php/', $str);
echo $check;
?>

خروجی دستور بالا برابر 1 یا TRUE خواهد بود، چون عبارت دقیقا با php شروع شده، اما اگر مثال به صورت زیر بود:
PHP:
<?php
$str = 'why php is easy and powerful?!';
$check = preg_match('/^php/', $str);
echo $check;
?>

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

saalek110

Well-Known Member
$ (پایان):
در کنار علامت ^ (نقطه شروع رشته)، از علامت $ (dollar) برای تعیین نقطه پایان یک عبارت استفاده می شود، به طور مثال دستور $bcd به معنی هر عبارتی است که در انتها به bcd ختم شود، لذا رشته abcd را شامل می شود، اما bcde را خیر (چون عبارت اول دقیقا به bcd ختم شده اما عبارت دوم به cde)، چند مثال:

PHP:
<?php
$str = 'PHP for Web';
$check = preg_match('/Web$/', $str);
echo $check;
?>

خروجی دستورات بالا عدد 1 خواهد بود، چون رشته مورد بررسی ما دقیقا به عبارت Web ختم شده، اما اگر رشته به صورت فرضی زیر بود:

PHP:
<?php
$str = 'PHP for Web?!';
$check = preg_match('/Web$/', $str);
echo $check;
?>

نتیجه برابر 0 می شد، چون عبارت به web ختم نشده بلکه به علامت ?! ختم شده است.
نکته: در کدنویسی حرفه ای و پیشرفته، معمولا از ترکیب پیچده تری از این دستورات ساده استفاده می شود، اما قواعد و اصول کار به همین صورت است.
 

saalek110

Well-Known Member
{ } (تعداد تکرار):
در دستورات عبارات با قاعده از علامت {} (آکولاد یا brace) برای مشخص کردن تعداد تکرار یک کاراکتر استفاده می شود، به طور مثال {3}a شامل عبارتی می شود که a در آن سه بار به صورت متوالی تکرار شده باشد، به فرض aaa، عدد داخل {} اگر به صورت تکی باشد، نمایانگر تعداد حداقل تکرار متوالی است، به فرض {5} یعنی الزاما باید حداقل 5 بار متوالی یک کاراکتر تکرار شده باشد، اما اگر به صورت دو قسمتی باشد (به طور مثال {1,3})، عدد اول حداقل تکرار و عدد دوم حداکثر را نشان می دهد، یعنی حداقل 1 بار و حداکثر سه بار تکرار را شامل می شود، به مثال زیر توجه کنید:
PHP:
<?php
$str = 'bbb';
$check = preg_match('/^b{1,3}$/', $str);
echo $check;
?>
خروجی مثال بالا عدد 1 خواهد بود، چون رشته با حرف b شروع شده، حرف b از یک تا سه بار در آن تکرار شده و نهایتا نیز به b ختم شده، اما اگر همین دستور را به شکل زیر تغییر دهیم:
PHP:
<?php
$str = 'bbbb';
$check = preg_match('/^b{1,3}$/', $str);
echo $check;
?>
نتیجه برابر 0 خواهد بود، چرا که حرف b چهار بار متوالی در رشته تکرار شده، در حالی که در دستور ما 1,3 بار مد نظر است.
دقت کنید که علامت {} در حالت عادی تنها یک کاراکتر یا مجموعه ای از کاراکترهای قبل از خود را بررسی می کند، به طور مثال در دستور {1,3}web، تنها تکرار حرف b مورد نظر است، نه کل عبارت، به مثال زیر توجه کنید:


PHP:
<?php
$str = 'webbbb';
$check = preg_match('/^web{1,3}$/', $str);
echo $check;
?>
نتیجه دستور بالا 0 یا FALSE خواهد بود، چون تکرار حرف b بین یک تا سه بار مد نظر است، اما این حرف چهار بار متوالی در رشته مورد بررسی تکرار شده است.
نکته: تعین عدد دوم در برخی زبان های برنامه نویسی مانند JavaScript اختیاری است، لذا اگر به فرض دستور را به شکل {,1}web استفاده کنید، یعنی حداقل یک و حداکثر هر تعدادی را شامل می شود (حداکثری ندارد)، مثال:


JavaScript:
<script type="text/javascript">
var str = 'webbbb';
var reg = /^web{1,}$/;
if(reg.test(str)){
    alert('مقادیر معتبر است');
}
else{
    alert('مقادیر معتبر نیست');   
}
</script>
که پیغام "مقادیر معتبر است" را نمایش خواهد داد، چون حداکثر تکرار را تعیین نکرده ایم.
 

saalek110

Well-Known Member
* (صفر تکرار یا بیشتر):

علامت * (star یا ستاره)، کاراکتر دیگری است که در عبارات با قاعده کاربرد دارد، این کاراکتر به معنی صفر تکرار یا بیشتر است، به طور مثال *a شامل رشته ای می شود که حرف a در آن صفر بار یا به دفعات بیشتری تکرار شده باشد، یا به طور مثال دستور *ab^ شامل رشته ای می شود که با a شروع شده و حرف b در آن صفر بار یا بیشتر تکرار شده باشد، به مثال زیر توجه کنید:
PHP:
<?php
$str = 'book';
$check = preg_match('/[ab]c*/', $str);
echo $check;
?>
خروجی دستور بالا برابر 1 خواهد بود، چون [ab] یعنی یا حرف a یا حرف b در رشته باشد، و در قسمت دوم دستور نیز صفر تکرار یا بیشتر حرف c مد نظر بوده که عملا تاثیری در عبارت با قاعده ما ندارد، اما اگر همین دستور به صورت زیر بود:
PHP:
<?php
$str = 'book';
$check = preg_match('/[ad]c*/', $str);
echo $check;
?>

نتیجه برابر 0 یا FALSE خواهد بود، چون در قسمت اول دستور یعنی [ad]، وجود کاراکتر a یا d در رشته مد نظر است، اما چنین کاراکترهایی در book وجود ندارد.
 

saalek110

Well-Known Member
+ (یک تکرار یا بیشتر):
علامت + (plus یا به اضافه)، کاربردی مشابه * دارد، با این تفاوت که در اینجا حداقل یک بار تکرار نیاز است، به عبارت دیگر این علامت نمایانگر یک بار تکرار یا بیشتر است، به طور مثال +a شامل رشته ای می شود که حداقل یک a در آن وجود داشته باشد، یا +550 شامل عددی می شود که حداقل یک صفر در آن به کار رفته باشد، به مثال زیر توجه کنید:
PHP:
<?php
$str = 'web.a.55';
$check = preg_match('/^[a-z]{3}\.[abc]+\.[0-9]{1}/', $str);
echo $check;
?>
خروجی کد بالا 1 یا TRUE خواهد بود، چون بر طبق دستور مد نظر ما، رشته باید با a-z به تعداد 3 کاراکتر شروع شده، سپس یک نقطه داشته باشد و بعد از نقطه، یک یا بیشتر کاراکتر a یا b یا c داشته باشد، سپس یک نقطه و در نهایت به عدد 0 تا 9 برسد (چون از علامت $ استفاده نکرده ایم، مابقی رشته بررسی نمی شود)، اما اگر علامت $ را در انتهای دستور بالا اضافه کنیم، نتیجه 0 یا FALSE خواهد بود، چون تعداد 1 عدد در انتها مد نظر ما است، اما 55 شامل دو عدد است.

 

saalek110

Well-Known Member
? (اختیاری):

علامت ? (question mark یا سوال) در عبارات با قاعده کاربرد به خصوصی دارد، از این نشان برای اختیاری (optional) کردن کاراکتر قبل از آن استفاده می شود، به طور مثال jpe?g هم شامل jpg می شود و هم شامل jpeg، چون بعد از حرف e علامت ? قرار گرفته و لذا بود یا نبود این حرف اختیاری است، به مثال زیر توجه کنید.
فرض کنید آدرس فایلی به صورت زیر است:
کد:
../upload/image.jpg
اکنون می خواهیم نام فایل را بدون پسوند از آدرس بالا استخراج کنیم، بدین منظور پارامتر دومی به تابع preg_match اضافه کرده و Regex زیر را می نویسیم:
کد:
^\.\.\/upload\/(.*)\.jpe?g$
شکل کامل کد ما به صورت زیر خواهد بود:

PHP:
<?php
$str = '../upload/image.jpg';
$check = preg_match('/^\.\.\/upload\/(.*)\.jpe?g$/', $str, $match);
echo $check;
print_r($match);
//echo $match[1];
?>
خروجی قسمت echo کد بالا عدد 1 یا مقادیر Boolean آن برابر TRUE خواهد بود، اما اگر با print_r از متغیر match (که خروجی تابع preg_match به صورت یک آرایه است) خروجی بگیریم، نتیجه به شکل زیر خواهد بود:
کد:
Array
(
    [0] => ../upload/image.jpg
    [1] => image
)
نکته 1: در عبارت با قاعده بالا، کاراکتر جدید () به کار رفته که در ادامه در مورد آن خواهیم گفت.
نکته 2: به عملکرد خنثی سازی علامت \ توجه کنید (برای خارج کردن کاراکتر . و / از حالت دستوری، از \ استفاده شده).
 

saalek110

Well-Known Member
( ) (ساخت گروه):
اگرچه علامت () (parenthesis یا پرانتز) در کاربردهای عادی مفهوم مشخصی دارد، اما این علامت در عبارات با قاعده طور دیگری تفسیر می شود و نمایانگر گروهی از توالی ها (pattern) است، به زبان ساده هر آنچه در بین () قرار گیرد به عنوان یک مجموعه دستور قابل استفاده است که در برخی توابع و دستورات به کار می رود، به طور مثال کد زیر در حالت عادی برای کلید 1 آرایه match چیزی چاپ نمی کند:
PHP:
<?php
$str = 'image22.jpg';
$check = preg_match('/[a-z]+[0-9]*\.jpe?g$/', $str, $match);
echo $check;
print_r($match);
//echo $match[1];
?>
نتیجه قسمت print_r کد بالا:
PHP:
Array
(
    [0] => image22.jpg
)
اما اگر همین کد را به صورت زیر ویرایش کنیم:
PHP:
<?php
$str = 'image22.jpg';
$check = preg_match('/([a-z]+[0-9]*)\.jpe?g$/', $str, $match);
echo $check;
print_r($match);
//echo $match[1];
?>
خروجی قسمت print_r به صورت زیر خواهد بود:
کد:
Array
(
    [0] => image22.jpg
    [1] => image22
)
ملاحظه می کنید که دستورات داخل () به عنوان یک گروه خاص پردازش شده و نتیجه در یک کلید مجزا به خروجی ارسال شده است.
حال فرض کنید می خواهیم عدد 22 را نیز در یک کلید مجزا داشته باشیم، در این صورت از علامت () در داخل علامت () دیگر به صورت زیر گروه استفاده می کنیم:

PHP:
<?php
$str = 'image22.jpg';
$check = preg_match('/([a-z]+([0-9]*))\.jpe?g$/', $str, $match);
echo $check;
print_r($match);
//echo $match[1];
?>
خروجی قسمت print_r به صورت زیر خواهد بود:
کد:
Array
(
    [0] => image22.jpg
    [1] => image22
    [2] => 22
)
 

جدیدترین ارسال ها

بالا