آموزش گام به گام رگولار اکسپرشن (Regular Expressions) یا ریجکس (Regex)
رگولار اکسپرشن یک الگوی تطابق است که می تواند ببیند آیا یک متن یا یک رشتۀ کاراکترها، مطابق با الگویی که شما می خواهید هستند یا نه.
بعنوان مثال، برای اینکه مطمئن شوید یک رشته متنی، مطابق با الگوی ایمیل است، می توانید چک کنید که ابتدا با حروف و اعداد شروع شود و در آن از کاراکتر های غیر مجاز استفاده نشده باشد، و علامت @ داشته باشد و…
برای این کار باید با دستور زبان رگولار اکسپرشنز آشنایی داشته باشید. رگولار اکسپرشنز می تواند ترسناک باشد.. ولی با یادگیری علامت ها و کاربرد آنها، این ترس ریخته می شود.
این مقاله شما را با انواع نشان های رگولار اکسپرشن آشنا کرده و کاربردهای مختلف را با مثال به شما یاد می دهد.
مانند کلاس اول دبستان، الفبا را باید حفظ کرد! سعی کنید کارایی علامت های زیر را از بر کنید. این به شما کمک شایانی خواهد کرد تا در رگلار اکسپرشنز خبره شوید (توجه کنید که اینها همۀ نشانه های رگولار اکسپرشن نیستند. برای همۀ نشانه ها به جدول کامل نشانه های رگولار اکسپرشن مراجعه کنید.):
حفظ کردن اینها کمی سخت است، ولی کار شما را در آینده خیلی ساده تر می کند!
اکنون ریجکس را با چند تا مثال نشان می دهیم. این مثال ها به شما کمک می کنند که به سینتکس رگولار اکسپرشنز مسلط بشوید. کاربرد ریجکس عموما در جاوا اسکریپت، پی اچ پی و ای اس پی است. بنابراین، یاد گیری آن، به شما در توسعه وب سایت کمک زیادی می کند. به مثال های زیر توجه کنید:
خوب، این اکسپرشن را ببینید:
/^\w+$/
سرکمفلکس (^) و دالر ساین ($) ابتدا و انتهای رشته را مشخص می کنند. بک اسلش دبلیو می گوید که: هر کلمه ای را پیدا کن و پلاس ساین می گوید که تعداد کاراکتر های این کلمه می تواند یک یا بیشتر باشد. بنا بر این، اگر در متن abcde1234 cdefg23456 داشته باشیم، هر دو کلمه با این الگو پیدا خواهند شد.
اکنون پیش از اینکه اکسپرشن های بعدی را ببینیم، می خواهیم با ابزاری آشنا شوید که در یاد گیری به شما کمک شایانی می کند. لطفا به سایت:
http://www.regexr.com/
سری بزنید. این ابزار آنلاین فوق العاده، کار شما را در یاد گیری راحت می کند.
متنی که در قسمت پایین است، قابل ویرایش توسط شما می باشد. و در کادر بالا، شما رگولار اکسپرشنز را وارد می کنید تا در متن پایین جستجو کند و نتایج را هایلایت کند. نیازی به تایپ کردن اسلش ها و کارکتر های ^ و $ وجود ندارد. جهت سادگی، شما فقط بدنه ی رگولار اکسپرشن را وارد می کنید. همانطور که مشاهده می کنید، این بهترین ابزار آموزش رگولار اکسپرشن می باشد.
( تمرین های بعدی را در سایت ریجکس آر تست کنید تا از نتایج آنها مطمئن شوید.)
خوب، این اکسپرشن را ببینید:
/^[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 را پیدا کند. می توانید اینرا در تول ریجکس آر تست کنید.
حال بیاید فرض کنیم شما از کاربر نام کاربری را می گیرید، و می خواهید مطمئن شوید که نام کاربری بین 3 تا 16 کاراکتر است و همچنین از پترن (الگوی) آلفانومریک (alphanumeric یعنی فقط حرف و عدد) تبعیت کرده و آندرلاین و منها نیز مجاز باشند. این الگو را ببینید:
همانطور که در تصویر نشان داده شده، پرانتز های پیچی (curly braces) نشان می دهند که کاراکتر ها نباید کمتر از 3 یا بیشتر از 16 باشند. این را نیز خودتان تست کنید.
اگر بخواهیم یک مثال کامل در زبان PHP از رگولار اکسپرشن داشته باشیم، می توانیم مثال فوق (نام کاربری) را استفاده کرده و در کد های پی اچ پی بصورت زیر اعمال کنیم:
<?php $userName = isset($_POST['username']?mysql_real_escape_string($_POST['username']):''); if($userName){ $pattern = '/^[a-z0-9_-]{3,16}$/' $output = preg_match($pattern,$userName); if($output){ echo 'Username complies the pattern!'; } } ?>
همانطور که در کد فوق می بینید، ابتدا به متغیر $userName مقدار می دهیم و سپس با دستور preg_match آنرا با الگوی نام کاربری تطبیق داده و اگر مطابق بود، پیام موفقیت را نمایش می دهیم.
حال ممکن است این سوال برای شما پیش بیاید که اگر ما بخواهیم در نام کاربری خود، حروف پارسی نیز داشته باشیم چگونه آنرا در رجکس تعریف کنیم. برای این کار، باید فرمت یونیکد کاراکتر هایی که می خواهید را پیدا کنید. بعنوان مثال:
[\u0600-\u06FF]
کلاس کاراکتر فوق، معرف حروف الف تا ی می باشد. و شامل گ چ پ ژ نیز هست. بازه ی زیر معرف اعداد عربی است (مانند ۳):
[\u0660-\u0669\u06F0-\u06F9]
جدول کامل کاراکتر های عربی در این پیج موجود است.
همچنین یک ابزار آنلاین دیگر وجود دارد جهت تبدیل کاراکتر ها یا متن از encoding های مختلف به انکودینگ مورد نظر شما. یعنی می توانید فرمت یونیکد هر کاراکتری که بخواهید را با این تولز بدست بیاورید:
اکنون بیاید با حل یک مساله واقعی، ویژگی های بیشتری از رگولار اکسپرشن یا همان ریجکس یاد بگیریم. فرض کنید، که ما هدر یک صقحه را دریافت می کنیم بصورت:
HTTP/1.1 200 OK Date: Fri, 7 Nov 2014 05:32:32 GMT
حال می خواهیم بدانیم که پس از HTTP/1.x چه عددی آمده است. بعنوان مثال اگر 200 بود یعنی عملیات خرید بدرستی انجام شده است و اگر 400 بود یعنی مشکلی وجود دارد.
توجه: جهت جلوگیری از طولانی شدن این پست، ادامه موضوع را در قسمت 2 قرار می دهیم. بر روی قسمت دوم کلیک کنید:
5 دیدگاه ها
سلام
پسر عموی عزیز
آقا مقاله Regex بسیا رمفید بود
دست شما درد نکنه
اقا اگه شماره تلگرام داری
دست گلتون درد نکنه ٬ آقایی کردین
امید هستم برنامه نویس آیفون
امین بهداروند سلام همزاد!!؟؟؟؟؟!!!!!! من اول تو رو دیدم ترسیدم و گفتم که من کی سایت زدم و عکسمو گذاشتم .
ولی الان میبینم که این شبیح منه و خیلی هم شبیح من ….داش من دارم پایتون یاد میگیرم بلدی بپرسم؟
بدلایل امنیتی نمیتونم عکسمو بزارم خواستی ببینی بیا تلگرام my telegram is
AnonymoZ@
والا… پایتون بلد نیستم. سوالت ربطی داره به رگولار اکسپرشن؟
عالی