برنامه نویسی

عبارات منظم (regex): راهنمای توسعه دهنده ضروری – توجه داشته باشید

1. مقدمه و اهداف یادگیری:

  • به دنیای جذاب عبارات منظم خوش آمدید! آنها را به عنوان یک “زبان” فوق العاده جمع و جور و تخصصی فکر کنید. الگوهای موجود در متن را جستجو ، پیدا و دستکاری کنیدبشر از اعتبارسنجی یک ایمیل تا استخراج پرونده های ورود به سیستم غول پیکر خاص ، Regex یک مهارت اساسی در جعبه ابزار هر توسعه دهنده است.
  • در عمل ، Regex ضروری است. آنها تقریباً توسط همه زبانهای برنامه نویسی مدرن و ابزارهای خط فرمان پشتیبانی می شوند. دامنه نه تنها خطوط بی شماری از کد دستی را برای پردازش زنجیره ای ذخیره می کند ، بلکه به کارهای پیچیده نیز اجازه می دهد. با این حال ، نحو مختصر آن می تواند رمزنگاری باشد. نکته اصلی درک مؤلفه های اساسی آن و ساختن الگوهای گام به گام است.
  • (یادداشت نقد و بررسی): در پایان این یادداشت ، می توانید:
    • آنچه را که یک بیان منظم و هدف اصلی آن است تعریف کنید.
    • متاکاراکترها و اندازه گیری های اساسی را شناسایی و درک کنید.
    • برای اصلاح جستجو از کاراکترها و لنگرها استفاده کنید.
    • برای اعتبار سنجی و جستجو در JavaScript الگوهای ساده ای بسازید.
    • متداول ترین موارد استفاده از Regx را تشخیص دهید.

2. مفاهیم اساسی (تعاریف کلیدی):

  • بیان منظم (regex / regexp): دنباله ای از شخصیت ها که تعریف می کند الگوی جستجوبشر
  • موتور Regex: نرم افزاری که الگوی RegX را تفسیر می کند و آن را بر روی یک متن (رشته) برای یافتن تصادفات اعمال می کند.
  • تحت اللفظی: شخصیتی در Regex که با خودش در متن مطابقت دارد (به عنوان مثال: a به دنبال حرف “A”) باشید.
  • metachacter: شخصیت با معنی خاص در زمینه regex (به عنوان مثال: . که به معنای “هر شخصیت به جز خط جدید” است). آنها باید با یک نوار معکوس “فرار کنند” (\) اگر می خواهید به دنبال شخصیت تحت اللفظی باشید (به عنوان مثال: \. به دنبال یک نکته تحت اللفظی باشید).
  • تصادف (مسابقه): قطعه متن که با الگوی تعریف شده توسط RegX مطابقت دارد.
  • پرچم ها (Banderas): اصلاح کننده هایی که رفتار جستجو را تغییر می دهند (به عنوان مثال: i برای نادیده گرفتن مورد بالا/پایین ، g برای جستجوی جهانی – همه تصادفات را پیدا کنید ، نه فقط اولین).

3. توسعه موضوع: ساختمان الگوهای regx

  • بیایید در مورد ساختن یک regex فکر کنیم که چگونه می توان توضیحی بسیار دقیق از آنچه به دنبال آن هستیم بسازیم. ما برای تعریف این الگوی از بلوک های ساختمانی (کاراکترها و متاکاتر ها) استفاده می کنیم.
  • قدرت در ترکیب این عناصر نهفته است. در اینجا اجزای اساسی:

    • تحت اللفظی: abc دنباله دقیق “ABC” را پیدا کنید.
    • متاکاراکترهای متداول:
      • . (نکته): هر شخصیتی به جز پرش خط.
      • \ (نوار معکوس): یک Metacarácter فرار می کند تا آن را به عنوان تحت اللفظی رفتار کند (\.با \*با \?) یا به شخصیت های عادی معنی خاصی می دهد (\dبا \sبا \w).
      • | (نوار / لوله عمودی): به عنوان “یا” منطقی عمل می کند. a|b “A” O “B” را جستجو کنید.
    • کلاسهای [...]: مجموعه ای از شخصیت های ممکن را تعریف کنید.
      • [aeiou] : به دنبال هر مصوت کوچک باشید.
      • [a-zA-Z0-9] : به دنبال هر حرف (مورد بالا یا پایین) یا رقم باشید.
      • [^0-9] (کنفرانس ^ در داخل از براکت): به دنبال هر شخصیتی باشید که هیچ یک رقم باشید (کلاس انکار شده).
    • کلاسهای از پیش تعریف شده (میانبرها):
      • \d: هر رقمی (معادل آن [0-9]).
      • \D: هر شخصیتی غیر از رقم ([^0-9]).
      • \w: هر کاراکتر “کلمه” (Alphanumeric + Script Low: [a-zA-Z0-9_]).
      • \W: هر شخصیتی که کلمه نیست ([^a-zA-Z0-9_]).
      • \s: هر شخصیت فضایی خالی (فضا ، برگه ، پرش خط و غیره).
      • \S: هر شخصیتی که فضای خالی نباشد.
    • Quantifiers (تکرار): آنها برای شخصیت یا گروه اعمال می شوند قدامیبشر
      • *: صفر یا بیشتر. a* “” ، “A” ، “AA” ، “AAA” و غیره را جستجو کنید.
      • +: یک یا چند بار. a+ “A” ، “AA” ، “AAA” و غیره (اما نه “” را جستجو کنید.
      • ?: صفر یا یک بار (اختیاری). colou?r “رنگ” را “رنگ” جستجو کنید.
      • {n}: دقیقاً n بارها \d{3} دقیقاً سه رقم پیدا کنید.
      • {n,}: حداقل n بارها \d{2,} به دنبال دو یا چند رقم باشید.
      • {n,m}: بین n حرف m بار (فراگیر). \d{2,4} دو تا چهار رقم را جستجو کنید.
      • حریص (حریص) در مقابل لیزا (تنبل): به طور پیش فرض ، کمیته ها “حریص” هستند (آنها سعی می کنند تا حد ممکن پوشش دهند). اضافه کردن ? پس از کمیت ، آنها را “تنبل” می کنند (حداقل آنها را پوشش می دهند). .* در مقابل .*?
    • ANCLA (موقعیت): آنها به دنبال شخصیت ها نیستند ، بلکه موقعیت های متن را دارند.
      • ^: شروع زنجیره (یا خط ، با پرچم m). ^abc “ABC” را فقط در صورتی پیدا کنید.
      • $: پایان زنجیره (یا خط ، با پرچم m). xyz$ فقط در صورت پایان به دنبال “XYZ” باشید.
      • \b: Word Limit (مرز کلمه). موقعیت بین a \w و الف \W، یا شروع/پایان زنجیره اگر شخصیت اول/آخر است \wبشر \bword\b به دنبال کلمه کامل “کلمه” باشید ، نه به عنوان بخشی از “ماهی شمشیر”.
      • \B: موقعیتی که یک کلمه محدود نیست.
    • گروه (...):
      • احزاب گروه کارفرما: (abc)+ BUSCA “ABC” ، “ABCABC” و غیره
      • آنها متن تصادفی را ضبط می کنند: آنها به آنها اجازه می دهند قسمت های فرعی کل تصادف را استخراج کنند.
      • غیر کاپتور: (?:...)بشر گروه اما ضبط نیست (اگر نیازی به ضبط ندارید) کارآمدتر است.
  • (یادداشت نقد و بررسی): ساختار اساسی: Caracteres با Cuantificadores با Anclasبشر ایالات متحده آمریکا [] برای مجموعه ها ، () به گروه/ضبط ، و para escapar o usar clases predefinidas.

4. Ejemplo Práctico (Validación de Email Simple en JavaScript)

  • Vamos a crear una RegEx para validar un formato de email muy básico. No será perfecta (la validación real de emails es muy compleja), pero ilustrará los conceptos. Queremos algo como: nombre@dominio.ext
  • یک الگوی می تواند باشد: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

    // Patrón RegEx para una validación simple de email
    const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    
    // Explicación del patrón:
    // ^                     -> Inicio de la cadena
    // [a-zA-Z0-9._%+-]+   -> Parte del nombre (antes del @):
    //    [a-zA-Z0-9._%+-] -> Permite letras, números, y los caracteres ., _, %, +, -
    //    +                 -> Debe haber uno o más de estos caracteres
    // @                     -> El carácter literal '@'
    // [a-zA-Z0-9.-]+      -> Parte del dominio (después del @, antes del último .):
    //    [a-zA-Z0-9.-]    -> Permite letras, números, puntos y guiones
    //    +                 -> Debe haber uno o más
    // \.                    -> El carácter literal '.' (escapado porque '.' es metacarácter)
    // [a-zA-Z]{2,}         -> Extensión del dominio (después del último .):
    //    [a-zA-Z]          -> Solo letras
    //    {2,}              -> Debe haber al menos 2 letras (ej: com, org, uk, io)
    // $                     -> Fin de la cadena
    
    // Cómo usarlo en JavaScript:
    const email1 = "test.user+alias@example-domain.com";
    const email2 = "invalid-email@";
    const email3 = "another@domain.c"; // Extensión muy corta
    const email4 = " user@domain.com"; // Espacio al inicio
    
    console.log(`"${email1}" es válido? ${emailRegex.test(email1)}`); // true
    console.log(`"${email2}" es válido? ${emailRegex.test(email2)}`); // false
    console.log(`"${email3}" es válido? ${emailRegex.test(email3)}`); // false
    console.log(`"${email4}" es válido? ${emailRegex.test(email4)}`); // false (por el espacio y ^)
    
    // Otros métodos útiles:
    // const matchResult = email1.match(emailRegex); // Devuelve detalles de la coincidencia o null
    // const replacedString = email1.replace(/@.*/, '@new-domain.net'); // Reemplazar partes
    

5. شیوه های خوب و ملاحظات اضافی:

*
* ویژگی: من تا حد امکان خاص می دانم. .* این قدرتمند اما اغلب بسیار گسترده است و می تواند منجر به همزمانی های غیر منتظره و مشکلات عملکرد (بازگشت به فاجعه بار) شود.
* خوانایی: خواندن پیچیده REGX دشوار است. در صورت امکان آنها را به طور کامل بگویید یا در صورت امکان آنها را به قسمت های کوچکتر تقسیم کنید. از پرچم استفاده کنید x (نظرات و فضاهای خالی نادیده گرفته می شود) اگر موتور شما از آن پشتیبانی می کند.
* آزمایش: RegX خود را با انواع موارد معتبر و نامعتبر امتحان کنید. از ابزارهای آنلاین مانند REGEX101 ، REGEXR یا ابزارهای توسعه مرورگر خود استفاده کنید.
* عملکرد: از بازگشت به عقب آگاه باشید. الگوهای تو در تو با کمیته ها * ای + آنها در موارد خاص می توانند بسیار کند باشند. از افراد غیرقانونی استفاده کنید (?:...) اگر نیازی به ضبط ندارید.
* فرار: به یاد داشته باشید که از متاکاراکترها فرار کنید (.با ?با *با +با (با )با [, ]با {با }با ^با $با \با |) اگر می خواهید به دنبال شخصیت تحت اللفظی باشید.

  • ساده را شروع کنید و به تدریج پیچیدگی را اضافه کنید. سعی نکنید یکباره الگوی کامل را ایجاد کنید. ابزارهای عمل و آزمایش بهترین متحدین شما هستند!
  • (یادداشت نقد و بررسی):
    • انجام: آزمون ، اظهار نظر ، خاص ، متاکاراکتری فرار ، ساده شروع کنید.
    • نکن: برای استفاده .* بدون مراقبت ، الگوهای غیر ضروری پیچیده و بدون اظهار نظر ایجاد کنید ، لنگرگاه ها را فراموش کنید ^ حرف $ برای اعتبارسنجی کامل زنجیرها.

6. خلاصه / کلیدی برای بررسی:

  • regex: الگوهای جستجو/دستکاری متن.
  • بلوک های اساسی: به معنای واقعی کلمه ، متاکاراکترها (. \ |) ، کلاس ها ([] \d \w \s) ، cuantifiers (* + ? {n,m}) ، لنگر (^ $ \b) ، گروه ها (()).
  • استفاده مشترک در JS: /patron/flags، روش .test()با .match()با .replace()با .search()بشر
  • Clave Flags: i (غیرقابل تصور به بالا/کوچک) ، g (جهانی).
  • کلید موفقیت: تمرین و آزمایش!

7. سوالات خود ارزیابی:

  1. بیان منظم به دنبال چه چیزی است /gato|perro/i؟
  2. تفاوت بین چیست *با + حرف ? به عنوان کمیته؟
  3. لنگرها برای چیست ^ حرف $ در یک عبارت معمولی که برای اعتبارسنجی یک ورودی کامل کاربر استفاده می شود؟
  4. چگونه می خواهید به دنبال یک نقطه تحت اللفظی (.) در متنی با استفاده از regx؟

امیدوارم این راهنما برای درک و بررسی عبارات منظم مفید باشد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا