
در دنیای برنامه نویسی و نرم افزار، Regex از جمله ابزارهایی است که هر برنامه نویسی دیر یا زود با آن روبرو میشود و باید استفاده از آن را یاد بگیرد. عبارات باقاعده یا Regular Expression ها یا بصورت خلاصه شده Regexها ابزارهایی قدرتمند برای تطابق الگو و جستجو در رشته ها هستند.
عبارات باقاعده می توانند برای کارهایی مانند اعتبار سنجی ورودی ها (input validating)، جستجو به دنبال الگوهای مشخص و یا دستکاری کردن رشته های متنی استفاده شوند.
در زیر آموزش و راهنمای پایه ای از regex بیان شده است تا به شما کمک کند آن را فرا بگیرید.
a matches the character "a"..: Matches any single character except newline.^: Asserts the start of a string.$: Asserts the end of a string.*: Matches 0 or more occurrences of the preceding element.+: Matches 1 or more occurrences of the preceding element.?: Matches 0 or 1 occurrence of the preceding element (makes it optional).\: Escapes a metacharacter to treat it as a literal.
\d: Matches any digit (equivalent to [0-9]).\D: Matches any non-digit character.\w: Matches any word character (alphanumeric + underscore, equivalent to [a-zA-Z0-9_]).\W: Matches any non-word character.\s: Matches any whitespace character (spaces, tabs, line breaks).\S: Matches any non-whitespace character.
[abc]: Matches either "a", "b", or "c".[a-z]: Matches any lowercase letter.[0-9]: Matches any digit.
Quantifiers specify how many times an element can occur:
{n}: Exactly n occurrences.{n,}: At least n occurrences.{n,m}: Between n and m occurrences.() to group parts of a regex. This allows you to apply quantifiers to the entire group. Example: (abc)+ matches "abc", "abcabc", etc.
| to specify alternatives. Example: cat|dog matches either "cat" or "dog".
^ to assert the start of a string and $ to assert the end. Example: ^Hello matches "Hello" at the start of a string.
در اینجا چند نمونه عملی از الگوهای regex آورده شده است:
Email Validation:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Phone Number (US):
^\(\d{3}\) \d{3}-\d{4}$
Date (YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$
بررسی اطراف (Lookaround) در عبارات باقاعده (Regex) ابزاری است برای بررسی وجود یا عدم وجود یک الگو قبل یا بعد از موقعیت فعلی، بدون اینکه آن بخش از متن در نتیجه نهایی گنجانده شود. این ابزارها به دو دسته اصلی تقسیم میشوند:
هر کدام از این دسته ها به دو نوع مثبت (Positive) و منفی (Negative) تقسیم میشوند.
?=...)هدف: بررسی میکند که بعد از موقعیت فعلی، الگوی مشخصی وجود داشته باشد.
مثال:
فرض کنید میخواهیم کلمه cat را فقط زمانی پیدا کنیم که بعد از آن کلمه fish بیاید:
cat(?= fish)تست:
I have a cat fish → cat is foundI have a cat dog → cat can not be found?!...)هدف: بررسی میکند که بعد از موقعیت فعلی، الگوی مشخصی وجود نداشته باشد.
مثال:
کلمه cat را پیدا کنید که بعد از آن کلمه dog نیاید:
cat(?! dog)تست:
I have a cat fish → cat is foundI have a cat dog → cat can not be found?<=...)هدف: بررسی میکند که قبل از موقعیت فعلی، الگوی مشخصی وجود داشته باشد.
مثال:
اعدادی را پیدا کنید که قبل از آن علامت $ باشد:
(?<=\$)\d+تست:
Price: $100 → 100 is foundPrice: €100 → 100 can not be found?<!...)هدف: بررسی میکند که قبل از موقعیت فعلی، الگوی مشخصی وجود نداشته باشد.
مثال:
اعدادی را پیدا کنید که قبل از آن علامت $ نباشد:
(?<!\$)\d+تست:
Price: €100 → 100 is foundPrice: $100 → 100 is not be foundفرض کنید میخواهیم رمز عبوری را اعتبارسنجی کنیم که:
[A-Z]) داشته باشد.\d) داشته باشد.^(?=.*[A-Z])(?=.*\d).{8,}$توضیح:
(?=.*[A-Z]) وجود حرف بزرگ در هر جای رشته.
(?=.*\d) وجود عدد در هر جای رشته.
. هر کاراکتری.{8,} حداقل ۸ کاراکتر.در عبارات منظم "modifier" ها (یا "flag"ها) به شما این امکان را میدهند که رفتار جستجو را تغییر دهید. این modifier ها میتوانند به شما کمک کنند تا جستجوهای خود را دقیقتر و کارآمدتر انجام دهید. در زیر به برخی از مهمترین modifiers در regex اشاره میکنم:
این modifier باعث میشود که جستجو به صورت غیر حساس به حروف بزرگ و کوچک انجام شود. به عنوان مثال میتواند abc، Abc، aBc و غیره را پیدا کند.
با استفاده از این modifier، علامت ^ و $ به ابتدای هر خط و انتهای هر خط در یک متن چند خطی اشاره میکنند. به طور پیشفرض، این علامتها فقط به ابتدا و انتهای کل متن اشاره دارند.
این modifier باعث میشود که علامت . بتواند شامل کاراکترهای جدید (newline) نیز باشد. به طور پیشفرض، . فقط کاراکترهای غیر از newline را شامل میشود.
این modifier به شما این امکان را میدهد که از فضاهای خالی و کامنتها در عبارات منظم استفاده کنید. با استفاده از این modifier، میتوانید عبارات خود را خواناتر کنید.
این modifier به شما این امکان را میدهد که از کاراکترهای یونیکد در عبارات منظم استفاده کنید.
این modifier در برخی زبانها (مانند JavaScript) به شما این امکان را میدهد که تمام تطابقها را در یک متن پیدا کنید، نه فقط اولین تطابق را. (do not return after first match)
(?i)hello(?m)^start.*end$
(?s)hello.world
با استفاده modifierها، میتوانید عبارات منظم خود را به گونهای تنظیم کنید که به نیازهای خاص شما پاسخ دهند.
برای انجام تمرین و تست از ابزارهای آنلاین زیر می توانید استفاده کنید:
این ابزارها الگوهای regex شما را توضیح می دهند و به شما امکان تست کردن الگوهای خود در مقابل ورودی ها (رشته های) ساده را فراهم می کنند.
بهترین راه برای یادگیری regex تمرین کردن است. سعی کنید برای سناریوهای مختلف از جمله اعتبارسنجی نام کاربری، رمز عبور یا فرمت های خاص ورودی regex ایجاد نمایید.
عبارات منظم می توانند پیچیده باشند اما با تمرین شما می توانید در استفاده از آنها خبره و مسلط باشید. از الگوهای ساده شروع کنید و به تدریج به سمت الگوهای پیچیده بروید.