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، زمانی که از پرانتز استفاده میکنید، سیستم علاوه بر نمایش Matchهای کلی، لیست گروههای استخراج شده (Group 1, Group 2, etc.) را به همراه بازه دقیق قرارگیری آنها در متن به شما نمایش میدهد.
-
ترکیب محدودیتها در بازه عددی شما میتوانید در
Character Classاز ترکیب اعداد و حروف استفاده کنید یا بازههای خاصی تعریف کنید؛ مثلاً[a-zA-Z0-9]تمام حروف کوچک، بزرگ و اعداد را پوشش میدهد.
