آموزش گام به گام رگولار اکسپرشن (Regular Expressions) یا ریجکس (Regex)

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

بعنوان مثال، برای اینکه مطمئن شوید یک رشته متنی، مطابق با الگوی ایمیل است، می توانید چک کنید که ابتدا با حروف و اعداد شروع شود و در آن از کاراکتر های غیر مجاز استفاده نشده باشد، و علامت @ داشته باشد و…

رجکس regex رگولار اکسپرشن اکسپرشنز

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

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

 

گام نخست: الفبای ریجکس

مانند کلاس اول دبستان، الفبا را باید حفظ کرد! سعی کنید کارایی علامت های زیر را از بر کنید. این به شما کمک شایانی خواهد کرد تا در رگلار اکسپرشنز خبره شوید (توجه کنید که اینها همۀ نشانه های رگولار اکسپرشن نیستند. برای همۀ نشانه ها به جدول کامل نشانه های رگولار اکسپرشن مراجعه کنید.):

  • . (دات) یعنی هر کاراکتری، بجز انتهای خط (اگر dotall معادل false باشد).
  • * (اَستِریسک) یعنی به تعداد ۰ یا بیشتر کاراکتر
  • + (پلاس ساین) یعنی به تعداد ۱ یا بیشتر کاراکتر
  • ? (کوئسچن مارک) یعنی مهم نیست در ادامه کاراکتری وجود داشته باشد یا نه (پس از آن باید ۰ یا ۱ کاراکتر بیاید تا تطابق صورت بگیرد).
  • \d (بک اسلش دی) یعنی اگر عدد بود
  • \w (بک اسلش دبلیو) یعنی اگر حرف بود (الفبای انگلیسی و عدد و آندر لاین)
  • [XYZ] یعنی یک تک-کاراکتر از کلاس کاراکتر ها
  • [XYZ]+ یعنی یک یا چند کاراکتر از کاراکتر های موجود در دسته
  • $ (دالر ساین) یعنی پایان رشته خط
  • ^ (سِرکُم فلِکس) یعنی آغاز رشته
  • [^a-z] داخل یک کلاس کاراکتر، سرکم فلکس به معنی (نه NOT) می باشد. در این مثال، به معنی “حروف کوچک نبودن” می باشد.

حفظ کردن اینها کمی سخت است، ولی کار شما را در آینده خیلی ساده تر می کند!

 

مثال ها

اکنون ریجکس را با چند تا مثال نشان می دهیم. این مثال ها به شما کمک می کنند که به سینتکس رگولار اکسپرشنز مسلط بشوید. کاربرد ریجکس عموما در جاوا اسکریپت، پی اچ پی و ای اس پی است. بنابراین، یاد گیری آن، به شما در توسعه وب سایت کمک زیادی می کند. به مثال های زیر توجه کنید:

خوب، این اکسپرشن را ببینید:

/^\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 را پیدا کند. می توانید اینرا در تول ریجکس آر تست کنید.

حال بیاید فرض کنیم شما از کاربر نام کاربری را می گیرید، و می خواهید مطمئن شوید که نام کاربری بین ۳ تا ۱۶ کاراکتر است و همچنین از پترن (الگوی) آلفانومریک (alphanumeric  یعنی فقط حرف و عدد) تبعیت کرده و آندرلاین و منها نیز مجاز باشند. این الگو را ببینید:

الگوی ریجکس نام کاربری رگولار اکسپرشن

همانطور که در تصویر نشان داده شده، پرانتز های پیچی (curly braces) نشان می دهند که کاراکتر ها نباید کمتر از ۳ یا بیشتر از ۱۶ باشند. این را نیز خودتان تست کنید.

اگر بخواهیم یک مثال کامل در زبان PHP از رگولار اکسپرشن داشته باشیم، می توانیم مثال فوق (نام کاربری) را استفاده کرده و در کد های پی اچ پی بصورت زیر اعمال کنیم:

همانطور که در کد فوق می بینید، ابتدا به متغیر $userName مقدار می دهیم و سپس با دستور preg_match آنرا با الگوی نام کاربری تطبیق داده و اگر مطابق بود، پیام موفقیت را نمایش می دهیم.

حال ممکن است این سوال برای شما پیش بیاید که اگر ما بخواهیم در نام کاربری خود، حروف پارسی نیز داشته باشیم چگونه آنرا در رجکس تعریف کنیم. برای این کار، باید فرمت یونیکد کاراکتر هایی که می خواهید را پیدا کنید. بعنوان مثال:

[\u0600-\u06FF]

کلاس کاراکتر فوق، معرف حروف الف تا ی می باشد. و شامل گ چ پ ژ نیز هست. بازه ی زیر معرف اعداد عربی است (مانند ۳):

[\u0660-\u0669\u06F0-\u06F9]

جدول کامل کاراکتر های عربی در این پیج موجود است.

همچنین یک ابزار آنلاین دیگر وجود دارد جهت تبدیل کاراکتر ها یا متن از encoding های مختلف به انکودینگ مورد نظر شما. یعنی می توانید فرمت یونیکد هر کاراکتری که بخواهید را با این تولز بدست بیاورید:

ابزار تبدیل انکودینگ encoding converter tool

 

اکنون بیاید با حل یک مساله واقعی، ویژگی های بیشتری از رگولار اکسپرشن یا همان ریجکس یاد بگیریم. فرض کنید، که ما هدر یک صقحه را دریافت می کنیم بصورت:

HTTP/1.1 200 OK Date: Fri, 7 Nov 2014 05:32:32 GMT

حال می خواهیم بدانیم که پس از HTTP/1.x چه عددی آمده است. بعنوان مثال اگر ۲۰۰ بود یعنی عملیات خرید بدرستی انجام شده است و اگر ۴۰۰ بود یعنی مشکلی وجود دارد.

 

توجه: جهت جلوگیری از طولانی شدن این پست، ادامه موضوع را در قسمت ۲ قرار می دهیم. بر روی قسمت دوم کلیک کنید:

قسمت دوم

راهنمای کامل رگولار اکسپرشن – ریجکس
۶ رای، میانگین: ۳٫۵ از ۵