ویرگول
ورودثبت نام
فرهاد صادقی
فرهاد صادقیمهندس نرم افزار، طراحی و راه اندازی سیستم های نرم افزاری بر پایه معماری میکروسرویس
فرهاد صادقی
فرهاد صادقی
خواندن ۶ دقیقه·۹ ماه پیش

آموزش سریع Regex یا Regular Expression

در دنیای برنامه نویسی و نرم افزار، Regex از جمله ابزارهایی است که هر برنامه نویسی دیر یا زود با آن روبرو میشود و باید استفاده از آن را یاد بگیرد. عبارات باقاعده یا Regular Expression ها یا بصورت خلاصه شده Regexها ابزارهایی قدرتمند برای تطابق الگو و جستجو در رشته ها هستند.

عبارات باقاعده می توانند برای کارهایی مانند اعتبار سنجی ورودی ها (input validating)، جستجو به دنبال الگوهای مشخص و یا دستکاری کردن رشته های متنی استفاده شوند.

در زیر آموزش و راهنمای پایه ای از regex بیان شده است تا به شما کمک کند آن را فرا بگیرید.

1. Basic Syntax

  • Literals: Characters that match themselves. For example, a matches the character "a".
  • Metacharacters: Special characters that have specific meanings:

.: 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.

2. Character Classes

  • Basic Classes:

\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.

  • Custom Classes: You can define your own character classes using square brackets:

[abc]: Matches either "a", "b", or "c".
[a-z]: Matches any lowercase letter.
[0-9]: Matches any digit.

3. Quantifiers

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.

4. Groups and Ranges

  • Grouping: Use parentheses () to group parts of a regex. This allows you to apply quantifiers to the entire group.

Example: (abc)+ matches "abc", "abcabc", etc.

  • Alternation: Use the pipe | to specify alternatives.

Example: cat|dog matches either "cat" or "dog".

5. Anchors

  • Start and End: Use ^ 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

بررسی اطراف (Lookaround) در عبارات باقاعده (Regex) ابزاری است برای بررسی وجود یا عدم وجود یک الگو قبل یا بعد از موقعیت فعلی، بدون اینکه آن بخش از متن در نتیجه نهایی گنجانده شود. این ابزارها به دو دسته اصلی تقسیم میشوند:

  1. Lookahead (بررسی جلو)
  2. Lookbehind (بررسی عقب)

هر کدام از این دسته ها به دو نوع مثبت (Positive) و منفی (Negative) تقسیم میشوند.

1. Positive Lookahead (?=...)

هدف: بررسی میکند که بعد از موقعیت فعلی، الگوی مشخصی وجود داشته باشد.
مثال:
فرض کنید میخواهیم کلمه cat را فقط زمانی پیدا کنیم که بعد از آن کلمه fish بیاید:

cat(?= fish)

تست:

  • I have a cat fish → cat is found
  • I have a cat dog → cat can not be found

2. Negative Lookahead (?!...)

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

cat(?! dog)

تست:

  • I have a cat fish → cat is found
  • I have a cat dog → cat can not be found

3. Positive Lookbehind (?<=...)

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

(?<=\$)\d+

تست:

  • Price: $100 → 100 is found
  • Price: €100 → 100 can not be found

4. Negative Lookbehind (?<!...)

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

(?<!\$)\d+

تست:

  • Price: €100 → 100 is found
  • Price: $100 → 100 is not be found

مثال کاربردی ترکیبی (رمز عبور):

فرض کنید میخواهیم رمز عبوری را اعتبارسنجی کنیم که:

  • حداقل یک حرف بزرگ ([A-Z]) داشته باشد.
  • حداقل یک عدد (\d) داشته باشد.
  • حداقل ۸ کاراکتر طول داشته باشد.
^(?=.*[A-Z])(?=.*\d).{8,}$

توضیح:

  • (?=.*[A-Z])

وجود حرف بزرگ در هر جای رشته.

  • (?=.*\d)

وجود عدد در هر جای رشته.

  • . هر کاراکتری.
  • {8,} حداقل ۸ کاراکتر.

نکات مهم:

  • بررسی اطراف (Lookaround) کاراکترها را مصرف نمیکند (Zero-width assertions).
  • در Lookbehindها، الگو باید طول ثابتی داشته باشد (در برخی موتورهای Regex).
  • برای ترکیب چند شرط، از چند Lookaround پشت سر هم استفاده کنید.

Modifiers

در عبارات منظم "modifier" ها (یا "flag"ها) به شما این امکان را می‌دهند که رفتار جستجو را تغییر دهید. این modifier ها می‌توانند به شما کمک کنند تا جستجوهای خود را دقیق‌تر و کارآمدتر انجام دهید. در زیر به برخی از مهم‌ترین modifiers در regex اشاره می‌کنم:

  • i (case insensitive)

این modifier باعث می‌شود که جستجو به صورت غیر حساس به حروف بزرگ و کوچک انجام شود. به عنوان مثال می‌تواند abc، Abc، aBc و غیره را پیدا کند.

  • m (multiline)

با استفاده از این modifier، علامت ^ و $ به ابتدای هر خط و انتهای هر خط در یک متن چند خطی اشاره می‌کنند. به طور پیش‌فرض، این علامت‌ها فقط به ابتدا و انتهای کل متن اشاره دارند.

  • s (dotall)

این modifier باعث می‌شود که علامت . بتواند شامل کاراکترهای جدید (newline) نیز باشد. به طور پیش‌فرض، . فقط کاراکترهای غیر از newline را شامل می‌شود.

  • x (extended)

این modifier به شما این امکان را می‌دهد که از فضاهای خالی و کامنت‌ها در عبارات منظم استفاده کنید. با استفاده از این modifier، می‌توانید عبارات خود را خواناتر کنید.

  • u (unicode)

این modifier به شما این امکان را می‌دهد که از کاراکترهای یونیکد در عبارات منظم استفاده کنید.

  • g (global)

این modifier در برخی زبان‌ها (مانند JavaScript) به شما این امکان را می‌دهد که تمام تطابق‌ها را در یک متن پیدا کنید، نه فقط اولین تطابق را. (do not return after first match)

مثال‌ها:

  • برای جستجوی کلمه hello به صورت غیر حساس به حروف بزرگ و کوچک:
(?i)hello
  • برای جستجوی یک الگو در یک متن چند خطی:
(?m)^start.*end$
  • برای جستجوی یک الگو که شامل newline باشد:
(?s)hello.world

با استفاده modifierها، می‌توانید عبارات منظم خود را به گونه‌ای تنظیم کنید که به نیازهای خاص شما پاسخ دهند.



ابزارهای تمرین و تست Regex

برای انجام تمرین و تست از ابزارهای آنلاین زیر می توانید استفاده کنید:

Regex101

RegExr

این ابزارها الگوهای regex شما را توضیح می دهند و به شما امکان تست کردن الگوهای خود در مقابل ورودی ها (رشته های) ساده را فراهم می کنند.


بهترین راه برای یادگیری regex تمرین کردن است. سعی کنید برای سناریوهای مختلف از جمله اعتبارسنجی نام کاربری، رمز عبور یا فرمت های خاص ورودی regex ایجاد نمایید.

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

برنامه نویسیregexregular expression
۲
۰
فرهاد صادقی
فرهاد صادقی
مهندس نرم افزار، طراحی و راه اندازی سیستم های نرم افزاری بر پایه معماری میکروسرویس
شاید از این پست‌ها خوشتان بیاید