Regex Quantifiers
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
Quantifier
در دنیای Regular Expressions، Quantifier ابزاری است که مشخص میکند یک کاراکتر یا یک گروه از کاراکترها دقیقاً چند بار باید در متن تکرار شوند تا الگو Match پیدا کند.
Asterisk (*)
کوانتیفایری با معنی «صفر یا بیشتر» ( Zero or More ). این علامت کاراکترِ قبل از خود را به حالتی تبدیل میکند که میتواند اصلاً وجود نداشته باشد یا به تعداد نامحدود تکرار شود.
Plus (+)
کوانتیفایری با معنی «یک یا بیشتر» ( One or More ). برخلاف *، این علامت کاراکترِ قبل از خود را اجباری میکند؛ یعنی حداقل باید یک بار تکرار شده باشد تا الگو Match شود.
Question Mark (?)
کوانتیفایری با معنی «صفر یا یک» ( Zero or One ). این علامت برای اختیاری کردن ( Optional ) یک کاراکتر به کار میرود؛ یعنی آن کاراکتر یا نباید باشد، یا اگر هست فقط یک بار تکرار شده باشد.
Curly Braces ({ })
ساختاری برای تعیین تعداد دقیق تکرار یا یک بازه ( Range ) مشخص از تکرارها. این ابزار دقت بالایی برای کنترل تعداد دفعات تکرار در الگو فراهم میکند.
موارد مصاحبه ای
تفاوت اصلی بین * و + چیست؟
کوانتیفایر * اجازه میدهد کاراکتر موردنظر صفر بار تکرار شود (یعنی اصلاً نباشد). اما + حداقل یک بار حضور کاراکتر را الزامی میداند.
چگونه میتوان از ? برای مدیریت پروتکلهای وب استفاده کرد؟
برای Match کردن همزمان http و https میتوانید از الگوی https? استفاده کنید. در این الگو، ? باعث میشود حرف s اختیاری باشد؛ یعنی چه باشد و چه نباشد، الگو Match میشود.
کاربرد {n} در اعتبارسنجی دادهها (Data Validation) چیست؟
وقتی به تعداد دقیق کاراکتر نیاز داریم، مثلاً برای پیدا کردن سالهای چهاررقمی، از الگوی \d{4} استفاده میکنیم. این الگو دقیقاً گروههای چهارتایی از اعداد را پیدا میکند و اعداد با تعداد رقم کمتر یا بیشتر را نادیده میگیرد.
بازه {min, max} چگونه عمل میکند؟
این ساختار سه حالت رایج دارد:
{n}برای تعداد دقیق{n,}برای حداقلnبار و بدون سقف{n,m}برای حداقلnو حداکثرmبار تکرار
سناریو کاربردی
سناریوی اول: مدیریت فاصلههای خالی (Whitespace)
فرض کنید میخواهید عبارت Hello World را در متن پیدا کنید، اما ممکن است کاربر بین این دو کلمه هیچ فاصلهای نگذاشته باشد، یا یک فاصله، یا چندین فاصله و حتی Newline زده باشد.
با استفاده از الگوی Hello\s*World میتوانید تمام این حالتها را پوشش دهید. بخش \s* یعنی: «هر تعداد فاصله (از صفر تا بینهایت) که بین این دو کلمه بود، Match شود.»
سناریوی دوم: استخراج سال از متن
در یک متن شلوغ که شامل اعداد مختلف (مثل قیمت، کد کالا و سال) است، برای پیدا کردن سالهای میلادیِ ۴ رقمی از الگوی \d{4} استفاده میشود. این الگو در میان تمام اعداد، فقط آنهایی را انتخاب میکند که دقیقاً ۴ رقم پشتسرهم هستند (مثل 2025 یا 1991).
بیشتر بدانید
نکته کاربردی: استفاده از کاما در کرلی براکت
در ساختار {} اگر بنویسید {2,} یعنی حداقل ۲ بار تکرار و حداکثر بینهایت.
همچنین اگر بنویسید {,4} یعنی حداکثر ۴ بار؛ و حداقل میتواند صفر باشد (اختیاری).
ترکیب با کاراکتر کلاسها
کوانتیفایرها معمولاً با کاراکترکلاسهایی مثل \d (اعداد)، \w (حروف و اعداد) و \s (فاصلهها) ترکیب میشوند تا الگوهای قدرتمندی برای جستجو در متنهای پیچیده بسازند.
ترتیب اجرا
توجه کنید کوانتیفایرها همیشه روی «دقیقاً یک کاراکتر یا یک گروهِ قبل از خودشان» اثر میگذارند. برای اثرگذاری روی چندین کاراکتر، باید از گروهبندی با Grouping استفاده کنید.
