دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۶
  • اردیبهشت

جلسه ۲۲ : آموزش کار با عبارات منظم در پرل

  • دسته‌بندی‌ها :
جلسه ۲۲ : آموزش کار با عبارات منظم در پرل
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمندان به دوره آموزشی پرل Perl. در جلسه گذشته علاقمندان به پرل کار با استاندارد های کد در پرل را فراگرفتند؛ در این جلسه نیز قرار است که آموزش کار با عبارات منظم در پرل را به شما ارائه نماییم.

      آموزش کار با عبارات منظم در پرل

      پیش از شروع آموزش کار با عبارات منظم در پرل بهتر است که به ارائه تعرفی از ” عبارات منظم ” یا ” regular expression ” بپردازیم.
      یک عبارت منظم یک رشته از کاراکترهایی است که الگوی یا الگوهایی را که مشاهده می کنید تعریف می کند.
      سینتکس یک عبارت منظم در پرل بسیار شبیه سایر عبارت های منظم است و تفاوت چندانی با سایر این عبارات ها ندارد.
      عبارات منظم پرل نیز از برنامه های مختلف نظیر sed, grep, و awk پشتیبانی می کند.

      بهترین روش برای اجرای یک عبارت منظم استفاده از الگو اپراتور های binding است =~! and ~
      اولین اپراتور یک اپراتور تست و تخصیص است.

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

      • انطباق دهنده عبارات منظم یا //Match Regular Expression – m
      • جایگزین دهنده عبارات دهنده یا ///Substitute Regular Expression – s
      • مجری عبارات منظم یا ///Transliterate Regular Expression – tr

      خطوط رو به جلو در هر مورد بعنوان تعویض کننده برای عبارات منظم (regex) عمل می کنند.
      اگر شما با هر یک از delimiter دیگر راحت هستید، می توانید از آن استفاده نمایید.

      اپراتور Match

      از اپراتور match برای انطباق یک رشته یا statement با یک عبارت منظم استفاده می شود.
      برای مثال برای انطباق توالی  “foo” با اسکالر bar$ می توانید از statement زیر استفاده نمایید.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      //m در واقع همانند توالی //q عمل می کند.
      شما می توانید از هر ترکیبی از کاراکترهای مطابق با عنوان تعریف کننده برای اپراتور استفاده کنید.
      m()،m {}m، و > <m همگی معتبر هستند. مثال بالا را می توان به صورت زیر نوشت:

      مثال : 

      اگر delimiters ها رو به جلو هستند، می توانید m را از //m حذف کنید. اما برای دیگر delimiters باید از پیشوند m استفاده کرد.
      توجه داشته باشید که کل عبارت match، یعنی عبارت سمت چپ = ~ یا ~! و اپراتور match، در صورتی که عبارت مطابقت داشته باشد مقدار true (در یک محدوده اسکالر) را بازگردانی می نماید.
      بنابرین statement ما به شکل زیر خواهد بود.

      مثال : 

      اگر foo$ fh با regex مطابق باشد و یا اگر مطابقت آن ها با یکدیگر صورت نگیرد در آن صورت true$ به ۱ تنظیم خواهد شد.
      در محتوای یک لیست match محتوای هر عبارات گروهی را بازگردانی می نماید.
      به عنوان مثال، هنگام استخراج ساعت ها، دقیقه ها و ثانیه ها از یک رشته زمان، می توان از آن استفاده کرد.

      مثال : 

      در ادامه آموزش کار با عبارات منظم در پرل ویرایشگرهای اپراتور match را به شما معرفی می نماییم.

      ویرایشگرهای اپراتور match

      اپراتور match تعدادی ویرایشگر دارد که از آن ها پشتیبانی می نماید.
      ویرایشگر g/ اجازه global matching را می دهد.
      ویرایشگر i/ میزان حساسیت match را تعیین می کند.
      در ادامه به معرفی تعدادی از این ویرایشگرها می پردازیم.

      • i
        میزان حساسیت match را تعیین می کند.
      • m
        مشخص می کند که اگر یک رشته حاوی newline و carriage باشد در آن صورت کاراکترها را بازگردانی می نماید.
        بعد از این اپراتور های ^ و $ به جای مرزهای یک رشته با مرز های یک newline مطابقت پیدا می کنند.
      • o
        فقط یکبار اقدام به ارزیابی عبارت می کند.
      • s
        اجازه استفاده از نقطه ( . ) را برای تطابق یک کاراکتر newline را میدهد.
      • x
        برای ایجاد وضوح بیشتر اجازه استفاده از خطوط سفید را در عبارت می دهد.
      • g
        به صورت globally همه matches ها را می یابد.
      • cg
        اجازه سرچ و جستجو را حتی بعد از این که یافتن global match با شکست مواجه شد را می هد.

      matching یا انطباق یک بار مصرف (Matching Only Once)

      اپراتور  ?PATTERN? یک نسخه ساده از اپراتور match است که تفاوت چندانی با اپراتور //m ندارد.
      تنها تفاوت قابل ملاحظه این اپراتور با اپراتور //m این است که این اپراتور فقط با یک رشته که در جستجوی آن هستید برای باز نشانی مطابقت پیدا می کند.
      به عنوان مثال، می توان از این اپراتور برای  اولین و آخرین عناصر در یک لیست استفاده کرد.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      متغیرهای عبارات منظم (Regular Expression Variables)

      متغیرهای عبارات منظم شامل می شود که حاوی آخرین انطباق های grouping match است.
      &$ دیگر متغیر عبارت منظم است که حاوی تمام رشته های انطباق یافته است.
      نیز از جمله این متغیرها است که شامل همه موارد البته قبل از انطباق رشته می باشد.
      در کد زیر می توانید نتیجه را مشاهده نمایید.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      اپراتور جایگزینی (The Substitution Operator)

      اپراتور جایگزینی ///s یکی از اکستنشن های اپراتور match است که اجازه می دهد متن خود را با یک متن جدید جایگزین نمایید.
      فرم اصلی این اپراتور را در ادامه می بینید.

      مثال : 

      PATTERN عبارت منظم متن است که دنبال آن می گردید.
      علاوه بر این REPLACEMENT یک مشخصه برای متن یا عبارت منظم است که می خواهیم برای جایگزینی متن از آن استفاده کنیم.
      برای مثال می توان همه رخداد های dog را در نمونه زیر با رخداد های cat با استفاده از عبارات منظم جایگزین کرد.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

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

      ویرایشگر اپراتور جایگزینی

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

      شماره ویرایشگرتوضیحات ویرایشگر و جزئیات آن
      ۱   i
      match ها را از حرکت باز می دارد.
      ۲   m
      مشخص می کند که اگر یک رشته حاوی newline و carriage باشد در آن صورت کاراکتر
      ها را بازگردانی می نماید.
      بعد از این اپراتور های ^ و $ به جای مرزهای یک رشته با مرز های یک newline مطابقت
      پیدا می کنند.
      ۳   o
         فقط یکبار اقدام به ارزیابی عبارت می کند.
      ۴   s
      اجازه استفاده از نقطه ( . ) را برای تطابق یک کاراکتر newline را میدهد.
      ۵   x
         برای ایجاد وضوح بیشتر اجازه استفاده از خطوط سفید را در عبارت می دهد.
      ۶   g
      همه رخدادهای بیان شده در یک متن را با یک دیگر متن جایگزین می کند.
      ۷   e
      یک جایگزینی یا replacement را همانند یک statement در پرل ارزیابی می نماید و
      از مقادیر بازگردانی شده همانند یک متن جایگزین شده استفاده می نماید.

      اپراتور انتقال (The Translation Operator)

      گرچه شباهت هایی بین اپراتور انتقال با اپراتور جایگزینی وجود دارد ولی این دو دقیقاً مشابه هم نیستند.
      اپراتور انتقال برای جستجوی مقادیر جستجو از عبارات منظم استفاده نمی کند.
      در ادامه می توانید یک نمونه از این اپراتور را مشاهده نمایید.

      مثال : 

      اپراتور انتقال تمام رخ داد های کاراکترهای SEARCHLIST را با کاراکترهای متناظر آن در REPLACEMENTLIST جایگزین می کند.
      برای مثال در نمونه زیر ما از رشته “The cat sat on the mat” استفاده کرده ایم.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      می توان از محدوده های استاندارد های پرل نیز استفاده کرد، که به شما این امکان می دهد محدوده ی کاراکترها را با حروف یا عدد مشخص کنید.
      اگر قصد تغییر مورد رشته را دارید؛ می توانید از سینتکس زیر در تابع uc استفاده نمایید.

      مثال : 

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

      ویرایشگرهای اپراتور انتقال

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

      شماره ویرایشگرتوضیحات ویرایشگر و جزئیات آن
      ۱   c
      این ویرایشگر SEARCHLIST کامل می کند.
      ۲   d
      حذف کاراکترهای غیر قابل جایگزین.
      ۳   s
      این ویرایشگر کاراکترهای جایگزین شده تکراری را از بین می برد.

      ویرایشگر d/ کاراکترهایی را که با SEARCHLIST مطابقت دارند و علامت متناظر را در REPLACEMENTLIST ندارند، حذف می کند. به عنوان مثال :

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      آخرین ویرایشگر یعنی /s توالی کپی شده از کاراکترهایی که جایگزین شده اند را حذف می کند، بنابراین :

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      آشنایی با عبارات منظم پیچیده موضوع بعدی است که در آموزش کار با عبارات منظم در پرل مطرح می شود.

      عبارات منظم پیچیده

      عبارات منظم پیچیده به شما امکان می دهد که از انطباق با عبارات ساده فراتر روید و به یاری این قابیلت و به انطباق های پیچیده تری بپردازید.
      در جدول زیر می توانید سینتکس عبارات پیچیده منظم را در پایتون ببینید.

      عبارات منظم پیچیده

      شماره الگوالگو و ویژگی ها و جزئیات آن
      ۱   ^
      match شروع خط
      ۲   $
      march پایان خط
      ۳   .
      این الگو هر کاراکتری را به جز newline مطابقت می دهد.
      این الگو با استفاده از آپشن m می تواند هر newline را انطباق دهد.
      ۴   […]
      هر کاراکتر تنهایی را در brackets انطباق می دهد.
      ۵   […^]
            هر کاراکتر تنهایی را که در brackets نیست انطباق می دهد.
      ۶   *
      تعداد ۰ رخداد یا بیشتر از رخداد های قبلی را انطباق می دهد.
      ۷   +
          تعداد ۱ رخداد یا بیشتر از رخداد های قبلی را انطباق می دهد.
      ۸   ?
      تعداد ۰ یا ۱ رخداد از رخداد های قبلی را انطباق می دهد.
      ۹   {n }
         تعدادn رخداد از رخداد های قبلی را انطباق می دهد.
      ۱۰   { ,n}
         تعداد n رخداد یا بیشتر از رخداد های قبلی را انطباق می دهد.
      ۱۱   {n,m}
         تعداد حداقل n رخداد از m رخداد از رخداد های قبلی را انطباق می دهد.
      ۱۲   a| b
      تعداد a یا b مقدار را انطباق می دهد.
       ۱۳   w\
       
      کاراکتر های یک کلمه را مطابقت می دهد.
      ۱۴   W\
         کاراکترهای بدون کلمه را مطابقت می دهد.
      ۱۵   s\
      فضاهای خالی را مطابقت می دهد که معادل با [\t\n\r\f]
      ۱۶   S\
      فضاهای غیر خالی را مطابقت می دهد.
      ۱۷   d\
      ارقام را مطابق می دهد که معادل [۰-۹] است.
      ۱۸   D\
      به انطباق مواردی که شامل ارقام نمی شوند می پردازد.
      ۱۹   A\
      ابتدای یک رشته را انطباق می دهد.

      به ادامه جدول توجه نمایید

      ۲۰   Z\
         انتهای یک رشته را انطباق می دهد. این الگو در صورت وجود newline درست قبل از newline
      کار انطباق را انجام می دهد.
      ۲۱   z\
         انتهای یک رشته را انطباق می دهد.
      ۲۲   G\
         وقتی آخرین match یا انطباق به پایان رسید؛ نقطه آن را انطباق می دهد.
      ۲۳   b\
         word boundaries را بیرون از brackets انطباق می دهد.
      و backspace ها را بیرون از brackets انطباق می دهد.
      ۲۴   B\
         nonword boundaries ها را انطباق می دهد.
      ۲۵  .n, \t, etc\
         newlines ها، carriage های بازگردانی شده، tabs ها و … را انطباق می دهد.
      ۲۶   ۹\۱\
         زیر عبارات nth grouped را انطباق می دهد.
      ۲۷   ۱۰\
          زیر عبارات nth grouped را که در حال حاضر منطبق اند؛ انطباق می دهد.
      در غیر این صورت به ارجاع octal representation های کد های کاراکتر می پردازد.
      ۲۸   [aeiou]
         یک کاراکتر تکی را در یک مجموعه داده شده انطباق می دهد.
      ۲۹   [aeiou^]
         یک کاراکتر تکی را بیرون از یک مجموعه داده شده انطباق می دهد.

      metacharacter ^ با آغاز رشته مطابقت دارد و metasymbol $ با انتهای رشته منطبق است.
      در اینجا چند نمونه مختصر را می توانید ببینید.

      مثال : 

      حالا به مثال زیر توجه نمایید.

      مثال : 

      با اجرای قطعه کد بالا، نتیجه ای به صورت زیر به دست خواهد آمد.

      مثال : 

      انطباق سازی Boundaries آخرین مبحثی است که در آموزش کار با عبارات منظم در پرل مطرح می شود.

      انطباق سازی Boundaries

      b\ در هر word boundary به عنوان تعریف کننده کلاس w\ و کلاس W\ قابلیت انطباق دارد.
      از آن جا که w\ شامل کاراکترهای یک کلمه و W\ مخالف آن است بنابرین بدین معناست که این کلمه به پایان رسیده است.
      B\ نیز با هر چیزی که با word boundary نباشد انطباق ایجاد می کند.
      برای مثال :

      مثال : 

      کلام آخر

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

      QR:  جلسه ۲۲ : آموزش کار با عبارات منظم در پرل
      به اشتراک بگذارید