رجکس چیست؟ توضیح به زبان آدمیزاد، با مثال‌های اجراشده
آموزش

رجکس چیست؟ توضیح به زبان آدمیزاد، با مثال‌های اجراشده

اگر باید از یک متن طولانی همه‌ی شماره‌موبایل‌ها را دربیاوری، رجکس کار را به چند علامت کوچک می‌رساند؛ الگو را می‌نویسی و موتور جست‌وجو بقیه‌اش را می‌کند

تحریریه‌ی دینا کد
نویسنده
۵ دقیقه مطالعه۱ بازدید
اشتراک گذاری۱
فهرست مطالب
  1. ۱چطور با رجکس شماره موبایل‌ها را از متن بیرون بکشم؟
  2. ۲اجزای regex کدام‌اند و هر کدام چه می‌گویند؟
  3. ۳چه‌وقت سراغ regex نرویم؟
  4. ۴الگوی regex را کجا سریع تست کنم؟

یک فایل چندصدخطی وسط کارت است و باید از لابه‌لایش همه‌ی شماره‌موبایل‌ها را بیرون بکشی. رجکس دقیقاً برای همین لحظه ساخته شده. رجکس چیست؟ یعنی شکلِ چیزی را که می‌خواهی با چند علامت کوچک توصیف کنی؛ بعد موتور جست‌وجو هر تکه‌ای از متن را که با آن توصیف می‌خواند پیدا می‌کند.

سه جا بیشترین استفاده را دارد. در جست‌وجو، وقتی تکه‌های هم‌شکل را از لابه‌لای متن درمی‌آوری. در بررسی فرم، وقتی می‌خواهی مطمئن شوی ورودی کاربر شبیه شماره موبایل است یا نه. و در جایگزینی، وقتی ده‌ها تکه را یک‌جا عوض می‌کنی. پایتونش ماژول re است و جاوااسکریپت RegExp دارد؛ ایده‌ی اصلی در همه‌ی زبان‌ها یکی است و همین‌جا همان را یاد می‌گیری.

چطور با رجکس شماره موبایل‌ها را از متن بیرون بکشم؟

با یک مثال واقعی شروع کن؛ این کد را همان‌طور که هست می‌توانی اجرا کنی:

pythonimport re

matn = "شب 09121234567 تماس گرفت و پیام داد؛ شماره‌ی دفترش 02188776655 است."
print(re.findall(r"09\d{9}", matn))

خروجی:

['09121234567']

الگو تکه‌تکه خوانده می‌شود. دو کاراکتر اول عدد ۰ و ۹ هستند، بعد \d می‌گوید هر رقمی، بعد {9} می‌گوید همین گرفتن رقم دقیقاً نُه بار تکرار شود. شماره‌ی دفتر با ۰۲ شروع می‌شود و از همان دو رقم اول با الگو جور درنمی‌آید. هر رجکسی را با همین تقسیم‌بندی بخوان؛ اگر یک‌جا نگاهش کنی فقط رشته‌ای از علامت‌های غریبه می‌بینی.

اجزای regex کدام‌اند و هر کدام چه می‌گویند؟

این هفت علامت را بشناسی، بیشتر الگوهای رایج را می‌خوانی:

علامت یعنی اجرا که بکنی
\d هر رقمی، حتی ارقام فارسی روی «سال ۱۴۰۵» برمی‌گرداند ۱۴۰۵
+ یک بار یا بیشتر \d+ رشته‌ی رقم‌های پشت‌سرهم را کامل می‌گیرد
{9} دقیقاً نُه بار 09\d{9} همان الگوی شماره‌ی بالا
? صفر یا یک بار colou?r هم color را می‌گیرد هم colour
[abc] یکی از همین حروف [A-Za-z0-9._%+-] بخش اول الگوی ایمیل است
. هر کاراکتری به‌جز خط جدید a.c هم abc را می‌گیرد هم a c
^ و $ قفل به شروع و پایان ^\d{4} فقط وقتی متن با چهار رقم شروع شود

چه‌وقت سراغ regex نرویم؟

رجکس شکل را می‌بیند، ساختار را نه. این تفاوت وقتی گران می‌شود که متن ساختار داشته باشد؛ مثلاً HTML:

pythonimport re

html = "<p>پاراگراف اول</p><p>پاراگراف دوم</p>"
print(re.findall(r"<p>(.*)</p>", html))

خروجی:

['پاراگراف اول</p><p>پاراگراف دوم']

ستاره‌ی .* حریص است و تا آخرین بسته‌شدن تگ پیش می‌رود؛ دو پاراگراف در یک تطبیق بلعیده شدند. با .*? دو تکه‌ی تمیز برمی‌گردند، ولی این هنوز وصله است. برای HTML و JSON ابزار خودشان را بردار؛ الگو ساختار تودرتو را نمی‌فهمد.

ایمیل هم داستان خودش را دارد. در چرا اعتبارسنجی ایمیل با Regex هیچ‌وقت کامل نیست با تست واقعی نشان داده‌ایم که هر الگوی ایمیل یا کاربر واقعی را رد می‌کند یا ورودی خراب را قبول.

الگوی regex را کجا سریع تست کنم؟

در تست رجکس آنلاین الگو می‌نویسی، متن می‌گذاری و تطبیق‌ها همان لحظه هایلایت می‌شوند. فلگ g همه‌ی تطبیق‌ها را می‌گیرد و فلگ i بزرگ و کوچکی حروف را بی‌اثر می‌کند. همه‌چیز داخل مرورگر اجرا می‌شود و هیچ ورودی‌ای جایی ذخیره نمی‌شود.

یک نکته‌ی کوچک هم بگویم که دیر یا زود گریبانت را می‌گیرد. \d در پایتون حتی ارقام فارسی مثل ۱۴۰۵ را هم می‌گیرد؛ خودم روی Python 3.13 آزمایشش کردم. جاوااسکریپت اما همان \d را فقط ارقام ۰ تا ۹ انگلیسی می‌شناسد. پس الگویی که برای فرم وب نوشته شده ممکن است در پایتون رفتار دیگری داشته باشد؛ هر الگو را با متن واقعی خودت بسنج، نه با نمونه‌ی کپی‌شده.

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

قدم بعدی روشن است. یک متن واقعی از کارت بردار و الگوی \d+ را رویش اجرا کن. از این به بعد هر الگویی که لازم شد را کپی نمی‌کنی؛ خودت می‌نویسی و در تستر می‌سنجی.

برچسب‌ها:#Regex#مبتدی
تحریریه‌ی دینا کد
نویسنده

نظرها

اولین نفری باشید که نظر می‌دهد
برای ثبت نظر وارد شوید

سؤالتان را بپرسید یا تجربه‌تان را بنویسید تا نویسنده‌ی مطلب پاسخ بدهد.

مطالب مرتبط

از همین دسته
دستور stash در گیت چیست و چه کاربردی دارد
آموزش

دستور stash در گیت چیست و چه کاربردی دارد

دستور stash در گیت تغییرات ثبت‌نشده شاخه کاری را موقتا کنار می‌گذارد تا بدون ثبت کامیت ناقص بتوانید روی وظایف فوری کار کنید.

تحریریه‌ی دینا کد۶ دقیقه
diff در گیت چیست و چه‌وقت استفاده می‌شود؟
آموزش

diff در گیت چیست و چه‌وقت استفاده می‌شود؟

git diff دو نسخه از کدها را کنار هم می‌گذارد و خط‌به‌خط نشان می‌دهد چه چیزی عوض شده. یک نگاه به diff قبل از هر add و commit کافی است

تحریریه‌ی دینا کد۷ دقیقه
branch در گیت چیست و چه‌وقت بسازیمش؟
آموزش

branch در گیت چیست و چه‌وقت بسازیمش؟

branch یک اشاره‌گر متحرک به یکی از کامیت‌هاست، نه کپی پوشه‌ی پروژه. با git switch می‌سازی و جابه‌جا می‌شوی، با merge برمی‌گردانی و در پایان پاکش می‌کنی

تحریریه‌ی دینا کد۷ دقیقه
رجکس چیست؟ توضیح Regex به زبان ساده — دینا کد