Regex Groupings
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
Grouping
مکانیزمی در ریجکس که به ما اجازه میدهد به جای جستجوی کاراکترهای تصادفی، الگوهایی را برای مطابقت با مجموعهای از کاراکترها یا ساختارهای خاص تعریف کنیم.
Character Class
مجموعهای از کاراکترها که داخل براکت [] قرار میگیرند. این ساختار به ریجکس میگوید که هر یک از کاراکترهای داخل براکت میتواند با متن مطابقت داشته باشد (عملکردی شبیه به "یا" بین تک کاراکترها).
Negated Character Class
با قرار دادن علامت ^ بلافاصله بعد از باز شدن براکت (به صورت [^...])، ریجکس هر کاراکتری را که در آن مجموعه نباشد پیدا میکند. این برعکس حالت معمولی Character Class عمل میکند.
Alternation
استفاده از علامت پایپ | برای ایجاد شرط "یا" بین چندین عبارت یا کلمه کامل. این ابزار اجازه میدهد که اگر هر یک از عبارتهای سمت چپ یا راست مطابقت داشت، به عنوان نتیجه انتخاب شود.
Capturing Group
استفاده از پرانتز () برای گروهبندی بخشی از الگو. هدف اصلی آن علاوه بر گروهبندی، استخراج و ذخیرهسازی آن بخش از متن برای استفادههای بعدی در زبانهای برنامهنویسی است.
موارد مصاحبه ای
تفاوت جستجوی معمولی با استفاده از Character Class در چیست؟
اگر عبارت aeiou را بدون براکت جستجو کنید، ریجکس دقیقاً به دنبال همین کلمه میگردد. اما اگر از [aeiou] استفاده کنید، هر کدام از این حروف به تنهایی در هر جای متن پیدا شوند، یک Match محسوب میشوند.
آیا \d با [1-9] تفاوتی دارد؟
در اکثر موتورهای ریجکس، این دو معادل هم هستند. \d یک راه میانبر برای نوشتن تمام اعداد از ۰ تا ۹ است. اما مزیت [] این است که میتوانید بازههای خاصی مثل [1-5] را تعریف کنید.
کاربرد اصلی Capturing Group در برنامهنویسی چیست؟
برخلاف Character Class که فقط برای پیدا کردن کاراکتر است، Capturing Group (با پرانتز) اجازه میدهد بخش خاصی از متن (مثلاً پیشوند یک نام یا بخشی از شماره تلفن) را در حافظه ذخیره کرده و در زبانهایی مثل Python یا JavaScript آن را بیرون بکشید و پردازش کنید.
عملکرد علامت ^ در داخل و خارج از براکت چه تفاوتی دارد؟
اگر ^ در ابتدای یک Character Class بیاید (مثل [^abc])، به معنای نفی (Negation) است و هر چیزی غیر از آن کاراکترها را مچ میکند. (نکته: کاربرد آن در خارج از براکت برای نشان دادن ابتدای خط است که در این درس بررسی نشد).
سناریو کاربردی
سناریوی اول: پیدا کردن حروف صدادار
برای پیدا کردن تمام حروف صدادار انگلیسی در یک متن، از الگو [aeiou] استفاده میکنیم. اگر بخواهیم تمام کاراکترهایی که صدادار نیستند (شامل حروف بیصدا، اعداد و فضاها) را پیدا کنیم، از الگوی منفی [^aeiou] استفاده میشود.
سناریوی دوم: انتخاب بین چندین گزینه (OR)
فرض کنید در یک متن میخواهید کلمات apple، orange و banana را پیدا کنید. به جای نوشتن سه الگوی مجزا، میتوانید از apple|orange|banana استفاده کنید. ریجکس متن را پیمایش کرده و هر جا به یکی از این سه کلمه برسد، آن را هایلایت میکند.
سناریوی سوم: استفاده از گروهبندی برای استخراج
اگر بخواهیم عبارت Mr را در متن پیدا کنیم و آن را به عنوان یک واحد مجزا برای پردازشهای بعدی ذخیره کنیم، آن را داخل پرانتز به صورت (Mr) مینویسیم. در ابزارهایی مثل Regex101، این بخش معمولاً با رنگ متفاوتی (مثلاً سبز) نشان داده میشود که نشاندهنده تشکیل یک Group است.
بیشتر بدانید
نکته تایپی
برای تایپ علامت پایپ | در اکثر کیبوردها میتوانید از ترکیب کلیدهای Shift + \ (بکاسلش) استفاده کنید.
نکته ابزار Regex101
در سایت regex101.com، زمانی که از پرانتز استفاده میکنید، سیستم علاوه بر نمایش Matchهای کلی، لیست گروههای استخراج شده (Group 1، Group 2 و غیره) را به همراه بازه دقیق قرارگیری آنها در متن به شما نمایش میدهد.
ترکیب محدودیتها در بازه عددی
شما میتوانید در Character Class از ترکیب اعداد و حروف استفاده کنید یا بازههای خاصی تعریف کنید؛ مثلاً [a-zA-Z0-9] تمام حروف کوچک، بزرگ و اعداد را پوشش میدهد.
