با Regular Expression دوست باشیم

برنامه‌نویس‌ها اکثرا میانه خوبی با Regular Expression ندارند ولی این ابزار یکی از بهترین و سریعترین ابزارهای موجود برای برنامه‌نویس‌هاست. تقریبا هر موجودی که می‌توان در آن تایپ کرد، از امکان جستجو و جایگزینی (Replace) بر اساس RegEx پشتیبانی می‌کند.

برای مثال در یک زمانی برای همه خصیصه‌ها در یک پروژه دات نتی XML Comment گذاشتم. اما بعدا متوجه شدم که این کامنت‌ها کمکی به خواننده نمی‌کند چون توضیح خاصی داخلش نیست. اگر می‌خواستم از این به بعد کامنت ننویسم یکپارچکی از بین می‌رفت که برایم خیلی مهم است. اگر می‌خواستم همه کامنت‌ها را پاک کنم، وقت زیادی می‌گرفت!

راه حل ساده، Regular Expression بود. با جایگزینی RegularExpression زیر با یک رشته خالی همه کامنت‌ها پاک شد:


\s+///.*\n

این عبارت هر خطی از کد که؛

  • با تعداد حداقل یک فاصله شروع شده (\s+) و
  • با سه کارکتر «/» ادامه داده شده (///) و
  • با تعدادی کاراکتر که مهم نیست چه باشند (.*)
  • به انتهای خط رسیده است (\n)

را پیدا می‌کند. من این عبارت را با یک رشته خالی جایگزین کردم و نتیجه این شد که دیگر هیچ XML Comment ی در فایل‌ها وجود نداشتند.

از آن به بعد سعی کردم بیشتر با Regular Expression دوست باشم و حالا در لینوکس این دوستی بیشتر شده و استفاده‌ها و صرفه جویی‌های واقعا مفیدی دارد.

نباید فراموش کرد که Regular Expression هم یک زبان برنامه‌نویسی است (هر چند برای یک هدف خاص طراحی شده).

2 دیدگاه برای «با Regular Expression دوست باشیم»

  1. RegEx چیز بسیار بسیار پر کاربردی هست
    در یک پروژه من نیازمند جدا کردن حدود ۳۰۰ هزار شماره تلفن موبایل از لابه لای متن بودم
    دستی انجام دادنش واقعا وحشتناکه
    اما با چندتا عبارت منظم در عرض چند ثانیه کار تموم شد
    با یه چیزی مشابه این (راست به چپ):
    [۰][۰-۹]{۱۰}

    1. سلام
      ممنون از آموزش مفیدی که قرار دادید. منم مشکل مشابه شمارو دارم امیر جان
      یک فایل تکست بهم ریخته و نامنظم از انواع کاراکتر ها دارم که وسط این رشته ها شماره های موبایل هم با فرمت ۰۹xxxxxxxxx وجود دارن، حالا میخوام با استفاده از notepad++ و replace و Regular Expressions تمام رشته ها و کاراکتر ها و اعداد رو به غیر از شماره های موبایل با هیچ جایگزین کنم تا در نهایت فقط شماره موبایل هارو داشته باشم، ترجیحا هرکدام در یک خط. از عبارت [^(۰۹\d{9}\n)] استفاده کردم تا حدودی جواب میده اما بقیه اعداد رو هم قاطی میکنه.
      کد شما هم تست کردم جواب نداد. ممنون میشم اگر راهنماییم کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *