جلسه شماره 57رایگان

Regex Quantifiers

00:22:02

توضیحات جلسه

🎥 این ویدیو قسمت پنجاه و هفتم از بوت‌کمپ رایگان جاوا است. 📚 Regex – آشنایی کامل با Quantifiers در عبارات باقاعده در این جلسه به یکی از مفاهیم کلیدی و بسیار کاربردی در Regular Expressions می‌پردازیم: Quantifiers. Quantifierها به ما اجازه می‌دهند مشخص کنیم یک کاراکتر یا یک گروه از کاراکترها چند بار باید در الگو تکرار شوند؛ قابلیتی که در اعتبارسنجی داده‌ها و تعریف الگوهای دقیق بسیار حیاتی است. در این ویدیو بررسی می‌کنیم: - مفهوم Quantifiers در Regex و نقش آن‌ها در تعریف الگو - علامت * برای تکرار صفر تا بی‌نهایت بار - علامت + برای تکرار حداقل یک بار - علامت ? برای تکرار اختیاری (صفر یا یک بار) - استفاده از آکولادها { } برای تعیین تعداد دقیق تکرار - تعریف بازه‌های تکرار با ساختار {min,max} - مرور نهایی برای درک تفاوت‌ها و کاربرد هر نوع Quantifier 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi اگر سوالی داشتی، می‌تونی در گروه بپرسی؛ من یا مربی‌های گروه پاسخگو هستیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

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 استفاده کنید.