چطور از متاکاراکترها در رجکس (regex) جنگو استفاده کنیم؟

استفاده از متاکاراکترها در رجکس جنگو
در جنگو می توانیم با استفاده از re_path و عبارات قاعده مند یا رجکس، لینک ها و اسلاگ های سفارشی ایجاد کنیم. نمونه استفاده کاربردی رجکس و re_pathc استفاده از اسلاگ فارسی در جنگو است که در پست دیگری در پارس وب سرور به این موضوع پرداختیم .
برای این کار ابتدا باید با کارکترهایی که در رجکس استفاده می شود آشنا شویم.
در ادامه به معرفی و کاربرد هر کدام از این کاراکترهای مورد استفاده در رجکس میپردازیم:
علامتها و کاراکترهای خاص یا همان متاکاراکترها در عبارات منظم Regular Expressions یا Regex برای تعریف الگوهای پیچیده و تطبیق رشتهها استفاده میشوند.
در ادامه این پست به مهمترین علامتهای مورد استفاده در Regex میپردازیم و توضیح عملکرد هر کدام را به صورت خلاصه توضیح می دهیم:
1. `^` (Caret)
نشاندهنده شروع رشته است.
^hello
تطبیق رشتههایی که با `hello` شروع میشوند.
مثال: `hello world` تطبیق میدهد ، `world hello` تطبیق نمیدهد .
2. `$` (Dollar)
نشاندهنده پایان رشته است.
world$
تطبیق رشتههایی که با `world` تمام میشوند.
مثال: `hello world` تطبیق میدهد ، `world hello` تطبیق نمیدهد .
3. `.` (Dot)
مطابقت با هر کاراکتری به جز خط جدید.
h.llo
مطابقت با `hello`, `hallo`, `hxllo`.
مثال: `hello` تطبیق میدهد، `hlo` تطبیق نمیدهد.
4. `*` (Asterisk)
تطبیق صفر یا بیشتر از کاراکتر قبلی.
ab*c
مطابقت با `ac`, `abc`, `abbc`, `abbbc`.
مثال : `ac` تطبیق میدهد، `abcd` تطبیق نمیدهد.
5. `+` (Plus)
تطبیق یک یا بیشتر از کاراکتر قبلی.
ab+c
مطابقت با `abc`, `abbc`, `abbbc`.
مثال : `ac` تطبیق نمیدهد.
6. `?` (Question Mark)
تطبیق صفر یا یک بار از کاراکتر قبلی (اختیاری بودن).
colou?r
مطابقت با `color` و `colour`.
مثال : `color` تطبیق میدهد، `colouur` تطبیق نمیدهد.
7. `[]` (Brackets)
مشخص کردن مجموعهای از کاراکترها برای تطبیق.
[aeiou]
تطبیق با هر یک از حروف صدادار.
مثال : `apple` حرف `a` تطبیق میدهد، `sky` تطبیق نمیدهد.
8. `[^]` (Negation Brackets)
تطبیق با هر کاراکتری به جز کاراکترهای مشخصشده.
[^aeiou]
مطابقت با هر کاراکتری به جز حروف صدادار.
مثال : `sky` تطبیق میدهد.
9. `{}` (Curly Braces)
مشخص کردن تعداد تکرار.
a{2,4}
مطابقت با `aa`, `aaa`, یا `aaaa`.
مثال : `a` تطبیق نمیدهد، `aaa` تطبیق میدهد.
10. `|` (Pipe)
عملگر “یا” (OR).
cat|dog
مطابقت با `cat` یا `dog`.
مثال : `cat` تطبیق میدهد، `bird` تطبیق نمیدهد.
11. `()` (Parentheses)
گروهبندی و اولویتبندی الگوها.
(ab)+
مطابقت با `ab`, `abab`, `ababab`.
مثال : `ab` تطبیق میدهد، `a` تطبیق نمیدهد.
12. `\` (Backslash)
برای فرار دادن متاکاراکترها یا تطبیق کاراکترهای خاص.
\.
مطابقت با نقطه (`.`).
مثال : `file.txt` تطبیق میدهد.
13. `\d`
تطبیق با هر رقم (۰-۹).
\d+
مطابقت با `123`, `4567`.
مثال : `abc123` تطبیق میدهد.
14. `\D`
تطبیق با هر کاراکتری که رقم نباشد.
\D+
مطابقت با `abc`, `hello`.
مثال : `123` تطبیق نمیدهد.
15. `\w`
تطبیق با حروف، اعداد و آندرلاین `a-z`, `A-Z`, `0-9`, `_`.
\w+
مطابقت با `hello_world123`.
مثال : `hello` تطبیق میدهد.
16. `\W`
تطبیق با هر چیزی به جز حروف، اعداد و آندرلاین.
\W+
مطابقت با `!@#`, ` `.
مثال : `abc` تطبیق نمیدهد.
17. `\s`
تطبیق با هر نوع فضای خالی space, tab, newline.
\s+
مطابقت با فاصلهها.
مثال : `hello world` تطبیق میدهد.
18. `\S`
تطبیق با هر چیزی به جز فضای خالی.
\S+
مطابقت با `hello`, `world`.
مثال : ` ` تطبیق نمیدهد.
19. `(?P…)` (Named Groups)
تعریف گروههای نامگذاریشده برای استفاده در کد.
(?P\d{4})
تطبیق با سال چهاررقمی و ذخیره آن با نام `year`.
مثال : `/year/2025/`.
Characters | Explanation |
a | It Matches exactly one character a. |
ab | Matches the string ab. |
a|b | Matches a or b. If a is matched, b is left. |
$ | Match the end of the string. |
i | Ignore case. |
s | Matches everything, including newline as well. |
u | Matches Unicode character classes. |
x | Allow spaces and comments (Verbose). |
^ | Match the start of the string. |
* | Match 0 or more repetitions. |
+ | Match one or more times. |
? | Match zero or one time. |
{a,b} | Match a to b times. |
{a,} | Match at least a time. |
{,b} | Match up to b times. |
{a} | Match exactly a times. |
{a,b}? | Matches the expression to its left times, and ignores b. |
و جدول کلاس های متاکارکتر که در رجکس می توان استفاده کرد
Class | Explanation |
\d | Matches digits from 0-9. |
\D | Matches any non-digits. |
\w | Matches alphanumeric characters including, a-z, A-Z, 0-9, and underscore(_). |
\W | Matches any character, not a Unicode word character. |
\s | Matches whitespace characters. |
\S | Matches non-whitespace characters. |
\n | Matches a newline character. |
\t | Matches tab character. |
\b | Matches empty string, only at the beginning or end of a word. |
\Z | Matches the expression to its left at the absolute end of a string, whether in single or multi-line mode. |
\A | Matches the expression to its right at the absolute start of a string, whether in single or multi-line mode. |
برای بررسی بیشتر میتوان از ابزارهایی مثل regex101.com برای تست الگوها استفاده کرد.
در پست های آینده در مورد نحوه استفاده از این کاراکترها و نوشتن رجکس، مطالب بیشتری را با هم مرور می کنیم تا بتوانیم در زمان راه اندازی پروژه های جنگو از آن برای استفاده و تعریف اسلاگ های سفارشی استفاده کنیم.
از اینکه در این پست با ما همراه بودید سپاسگزاریم.