عبارات باقاعده (Regex) به زبان ساده؛ راهنمای عملی با مثال واقعی

عبارات باقاعده چیست و کجا به کار میآید؟ آموزش Regex با مثالهای واقعی؛ از اعتبارسنجی شماره موبایل تا جستوجوی پیشرفته در کد و لاگ.
عبارات باقاعده چیست و کجا به کار میآید؟
عبارات باقاعده (Regular Expression) که بیشتر با نام کوتاهش Regex میشناسند، زبانی کوچک برای توصیف الگو در متن است. بهجای اینکه بگویید «دنبال این کلمهٔ مشخص بگرد»، میگویید «دنبال هر رشتهای بگرد که با ۰۹ شروع میشود و دقیقاً ده رقم دارد». همین تغییر نگاه، Regex را از یک موضوع ترسناک به میانبُری واقعی برای کارهای تکراری تبدیل میکند؛ چیزی که با کمی تمرین، به قابلیتی پرفروش در رزومهٔ هر برنامهنویس تبدیل میشود.
این زبان کوچک همهجا حاضر است: در جستوجوی ادیتور، در اعتبارسنجی فرمها، در فیلترکردن لاگ سرور، در دستکاری دادهها با اسکریپت و حتی در دستورات ترمینال مثل grep. هر برنامهنویسی بالاخره روزی به صفحهای میرسد که بدون Regex باید ساعتها پیدا و جایگزینکردن دستی انجام دهد؛ دانستن چند الگوی پایه، همان ساعتها را به چند ثانیه تبدیل میکند.
الفبای Regex در ده دقیقه
Regex بر چند نشانهٔ ساده بنا شده و همین چند نشانه، بیشترِ نیاز روزمره را پوشش میدهد:
- متن ساده: هر کلمهای بنویسید همان را پیدا میکند؛ الگوی
errorهمهٔ errorهای لاگ را میگیرد. - نقطه (.): جای هر کاراکتری مینشیند؛
ca.هم cat را میگیرد هم car را. - کلاسهای آماده:
\dیعنی یک رقم،\wیعنی یک حرف یا رقم یا زیرخط،\sیعنی یک فاصله. - ستاره و بهعلاوه:
*یعنی «صفر بار یا بیشتر» و+یعنی «یک بار یا بیشتر» تکرارِ علامت قبلی. - براکت [ ]: مجموعهای از گزینهها؛
[۰-۹]یعنی هر رقم فارسی و[a-f]یعنی حروف بین a تا f. - علامت پرسش (?): یعنی اختیاییبودن؛ الگوی
colou?rهم color را میگیرد هم colour را.
دو نشانهٔ لنگر هم حیاتیاند: ^ ابتدای رشته و $ انتهای رشته را قفل میکند. الگوی ^09\d{9}$ را بخوانید: «دقیقاً از ۰۹ شروع شو، بعد دقیقاً نه رقم بیا، بعد تمام شو». آکولاد {9} یعنی نه تکرار. همین یک خط کوتاه، منطق کامل اعتبارسنجی شماره موبایل ایرانی است.
سه کاربرد واقعی که همین امروز میتوانید بنویسید
کاربرد اول، اعتبارسنجی فرمهاست؛ ایمیل، شماره موبایل و کد پستی را میشود با الگوهای یکخطی چک کرد. نکتهٔ مهم برای کاربران فارسی این است که ارقام فارسی را اول به لاتین تبدیل کنید و بعد الگو را اجرا کنید، وگرنه الگوی شما با ۰۹۱۲ فارسی شکست میخورد:
const toEn = s => s.replace(/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf(d));
const isPhone = /^09\d{9}$/.test(toEn(input));
کاربرد دوم، پاکسازی داده است. فرض کنید فهرستی از شمارهها دارید که بعضی با ۰۰۹۸ شروع شدهاند، بعضی با +۹۸ و بعضی با ۰؛ با یک الگو و یک جایگزینی میتوانید همه را به قالب واحد ۰۹… برسانید. کاربرد سوم، جستوجوی هدفمند در کد و لاگ است؛ مثلاً در هزار خط لاگ، فقط خطوطی که کد وضعیت ۴xx دارند با الگوی status: 4\d\d بیرون کشیده میشوند. همین سه کاربرد، Regex را از «موضوع دانشگاهی» به ابزار روزمرهٔ شما تبدیل میکند.
اشتباهات رایج و راه دوری از آنها
- طمعکاری (Greedy): الگوی
.*بیشترین مقدار ممکن را میگیرد و نتیجهٔ غیرمنتظره میسازد؛ در جای مناسب، از الگوی محدودتر مثل «هر چیزی بهجز فاصله» یعنی[^ ]*استفاده کنید. - فراموشکردن لنگرها: بدون
^و$، الگوی شماره موبایل رشتههای یازدهرقمی را هم قبول میکند، چون الگو «درونِ» آن پیدا شده است. - پارسکردن HTML با Regex: HTML ساختاری تودرتو دارد و Regex ابزار درست آن نیست؛ برای این کار پارسر مخصوص وجود دارد.
- تستنکردن با دادهٔ واقعی: الگویی که با سه نمونهٔ تمیز کار میکند، با دادهٔ واقعی کاربر (فاصلهٔ اضافه، ارقام فارسی، خط تیره) میشکند.
- الگوهای چندصفحهای ناخوانا: اگر الگو از یک خط بلندتر شد، آن را به قطعات کوچکتر بشکنید و هر قطعه را جداگانه تست کنید.
خودتان را با این اشتباهات تنبیه نکنید؛ همهٔ برنامهنویسان با آنها شروع کردهاند. قاعدهٔ ساده این است: اول کوچکترین الگوی ممکن را بنویسید، بعد قدمبهقدم آن را دقیقتر کنید و هر قدم را با دادهٔ واقعی بسنجید.
ابزار تمرین: از regex101 تا جستوجوی ادیتور
بهترین ابزار برای یادگیری، سایت regex101 است: الگو را مینویسید، متن آزمایشی را میچسبانید و همان لحظه توضیح هر بخش الگو و هایلایت تطبیقها را میبینید. پنل سمت راست همین سایت، بهمرور به معلم شما تبدیل میشود چون نشان میدهد هر گروه از الگو دقیقاً چه بخشی از متن را گرفته است. تازهکارها با همین یک ابزار نصف راه را میروند.
قدم دوم، بردن Regex به محیط واقعی است. در VS Code با Ctrl+F و فعالکردن آیکون .* میتوانید در کل پروژه جستوجوی الگویی بزنید و جایگزینی گروهی انجام دهید؛ مثلاً همهٔ console.logهای قدیمی را یکجا پیدا کنید. در ترمینال هم دستور grep با فلگ -E همین قدرت را روی فایلهای واقعی میدهد. اگر با پایگاه داده کار میکنید، آموزش SQL از صفر را بخوانید تا ببینید LIKE و توابع Regex دیتابیس دقیقاً کجا به کار میآیند، و برای تمرین روی دادههای خام واقعی، فهرست APIهای رایگان عمومی منبع بینظیری است.
روش یادگیری بدون حفظکردن جدولها
جدول نشانهها را حفظ نکنید؛ حتی برنامهنویسان باتجربه هم چیتشیت کنار دست دارند. روش درست این است: هر وقت به کاری تکراریِ متنی برخوردید، مکث کنید و بپرسید «آیا این الگو دارد؟». اگر جواب بله بود، همان یک الگو را بنویسید، تست کنید و در فایل یادداشتهای شخصیتان با یک مثال ذخیره کنید. سه ماه با این روش، دهها الگوی واقعاً کاربردی جمع میشود که از هر دورهٔ تصویری بیشتر میارزد.
یک تمرین کوچک هم پیشنهاد میکنم: هفتهای یک متن واقعی (یک فایل لاگ، یک خروجی CSV، یک متن طولانی) بردارید و سه الگو برای استخراج اطلاعاتش بنویسید. Regex عضلهای است که فقط با تمرین منظم پرورش مییابد و مثل هر مهارت برنامهنویسی، یادگیری با پروژهٔ واقعی سریعترین راه تثبیت آن است. از امروز شروع کنید؛ اولین الگوی واقعیتان را همین امشب بنویسید.
این مطلب برایتان مفید بود؟
با پسندیدن، به ما کمک میکنید مطالب بهتری منتشر کنیم.



