• برگه تقلب در عبارات منظم. مقدمه ای کاربردی برای عبارات منظم برای مبتدیان

    عبارات منظم چیست؟

    اگر تا به حال مجبور شده اید با آن کار کنید خط فرمان، احتمالاً از ماسک های نام فایل استفاده کرده اید. به عنوان مثال، برای حذف تمام فایل های موجود در فهرست فعلی که با حرف "d" شروع می شوند، می توانید بنویسید

    عبارات منظم ابزاری مشابه اما بسیار قدرتمندتر برای یافتن رشته ها، تطبیق آنها با یک الگو و غیره هستند. نام انگلیسی این ابزار است عبارات با قاعدهیا به سادگی RegExp. به بیان دقیق، عبارات منظم هستند زبان خاصبرای توصیف الگوهای رشته

    پیاده سازی این ابزار در متفاوت است زبانهای مختلفبرنامه نویسی، هر چند نه زیاد. در این مقاله، ما در درجه اول بر روی پیاده سازی Perl Compatible Regular Expression تمرکز خواهیم کرد.

    مبانی نحو

    اول از همه، شایان ذکر است که هر رشته به خودی خود یک عبارت منظم است. بنابراین، بیان

    هاها بدیهی است که با رشته "هاها" مطابقت دارد و فقط همین. عبارات منظم به حروف بزرگ و کوچک حساس هستند، بنابراین رشته "haha" (حروف کوچک) دیگر با عبارت بالا مطابقت ندارد.

    با این حال، در اینجا باید مراقب باشید - مانند هر زبان، عبارات منظم دارای کاراکترهای خاصی هستند که باید از آنها فرار کرد. در اینجا لیست آنها است:

    . ^ $ * + ? ( ) \ | () . محافظ انجام می شود به روش معمول- اضافه کردن \ قبل از کاراکتر ویژه.

    مجموعه کاراکتر

    فرض کنید می‌خواهیم در متن تمام الفاظی که به خنده دلالت می‌کنند پیدا کنیم. فقط

    هاها برای ما مناسب نیست - از این گذشته ، "ههه" ، "ههو" و "هههه" زیر آن قرار نمی گیرند. بله و مشکل مورد حرف اول باید به نحوی حل شود.

    در اینجا مجموعه ها به کمک می آیند - به جای تعیین یک کاراکتر خاص، می توانیم یک لیست کامل را یادداشت کنیم و اگر هر یک از کاراکترهای لیست شده در محل مشخص شده در رشته مورد بررسی باشد، رشته مناسب در نظر گرفته می شود. مجموعه ها در پرانتز مربع نوشته می شوند - الگو

    با هر یک از کاراکترهای "a"، "b"، "c" یا "d" مطابقت دارد.

    مجموعه داخلی ب Oبیشتر کاراکترهای خاص نیازی به فرار ندارند، بلکه باید از آنها استفاده کنید

    \ جلوی آنها خطا در نظر گرفته نخواهد شد. همچنان لازم است که از کاراکترهای "\" و "^" و ترجیحا "]" فرار کنید (بنابراین، مخفف هر یک از کاراکترهای "]" یا "[، در حالی که [x] فقط دنباله "[ است. ایکس]"). رفتار به ظاهر غیر معمول عبارات منظم با کاراکتر "]" در واقع با قوانین شناخته شده تعیین می شود، اما فرار از این شخصیت بسیار آسان تر از به خاطر سپردن آنها است. علاوه بر این، شما باید از کاراکتر "-" فرار کنید، از آن برای تنظیم محدوده استفاده می شود (به زیر مراجعه کنید).

    اگر بلافاصله پس از آن

    [ کاراکتر ^ را بنویسید، سپس مجموعه معنای مخالف را به دست می آورد - هر کاراکتری غیر از موارد ذکر شده مناسب در نظر گرفته می شود. بنابراین، الگوی [^xyz] با هر کاراکتری مطابقت دارد، به جز، در واقع، "x"، "y" یا "z".

    بنابراین، اگر بنویسیم، این ابزار را در مورد ما اعمال کنیم

    [Xx][aoie]x[aoie]، سپس هر یک از رشته‌های "Haha"، "hehe"، "heehe" و حتی "hoho" با الگو مطابقت دارند.

    کلاس های کاراکتر از پیش تعریف شده

    برای برخی از مجموعه هایی که اغلب استفاده می شوند، الگوهای خاصی وجود دارد. بنابراین، برای توصیف هر کاراکتر فضای خالی(فضا، برگه، شکست خط) استفاده می شود

    \s، برای اعداد - \d، برای حروف لاتین، اعداد و زیرخط "_" - \w.

    اگر اصلاً لازم است هر کاراکتری را توصیف کنید، برای این کار از یک نقطه استفاده می شود -

    اگر کلاس‌های مشخص شده با حرف بزرگ نوشته شوند (\S, \D, \W) معنای خود را به عکس تغییر می‌دهند - هر کاراکتر بدون فاصله، هر کاراکتری که عدد نباشد و هر کاراکتری غیر از لاتین. ، به ترتیب اعداد یا زیرخط ها هستند.

    همچنین با استفاده از عبارات منظم می توان موقعیت یک خط را نسبت به بقیه متن بررسی کرد. اصطلاح

    \b مرز یک کلمه را نشان می دهد، \B مرز کلمه نیست، ^ شروع متن است و $ پایان است. بنابراین، طبق الگوی \bJava\b در رشته "Java and JavaScript" 4 کاراکتر اول وجود خواهد داشت و طبق الگوی \bJava\B - کاراکترهای 10 تا 13 (به عنوان بخشی از کلمه " جاوا اسکریپت").

    محدوده ها

    ممکن است لازم باشد مجموعه ای را تعیین کنید که شامل حروف، به عنوان مثال، از "b" تا "f" باشد. به جای نوشتن

    [bvgdeziklmnoprostuf] می توانید از مکانیسم محدوده استفاده کنید و بنویسید [b-f]. بنابراین، الگوی x مربوط به رشته "xA6" است، اما با "xb9" مطابقت ندارد (اول، به دلیل این واقعیت است که فقط حروف بزرگ در محدوده مشخص شده است، و دوم، به دلیل اینکه 9 در آن گنجانده نشده است. فاصله 0-8).

    مکانیسم محدوده به ویژه برای زبان روسی مرتبط است، زیرا برای آن ساختاری مشابه وجود ندارد

    \w برای تعیین تمام حروف الفبای روسی، می توانید از الگوی [а-яА-ЯёЁ] استفاده کنید. لطفاً توجه داشته باشید که حرف "ё" در محدوده کلی حروف گنجانده نشده است و باید جداگانه ذکر شود.

    کمیت کننده ها (نشان دهنده تعداد تکرارها)

    بیایید به مثال خود برگردیم. اگر حرف "خنداننده" بیش از یک مصوت بین x ها باشد، مانند "هاهااااا" چه؟ فصل عادی قدیمی ما دیگر نمی تواند به ما کمک کند. در اینجا باید از کمیت سازها استفاده کنیم.

    توجه داشته باشید که کمیت فقط برای کاراکتر قبل از آن اعمال می شود.

    برخی از سازه‌های رایج مورد استفاده در زبان عبارت منظم، عناوین خاصی دریافت کرده‌اند:

    بنابراین، با کمک کمیت‌کننده‌ها، می‌توانیم الگوی خود را برای استقراض بهبود دهیم

    [Xx][aoei]+x[aoei]*، و می‌تواند رشته‌های "Haaha"، "heeeeeeh" و "Hihii" را تشخیص دهد.

    کمی سازی تنبل

    فرض کنید با وظیفه یافتن تمام تگ های HTML در یک رشته روبرو هستیم

    tproger- من عزیزسایت در مورد برنامه نویسی!

    راه حل واضح

    <.*>اینجا کار نمی کند - کل رشته را پیدا می کند، زیرا با یک تگ پاراگراف شروع می شود و با آن به پایان می رسد. یعنی محتوای تگ رشته p> در نظر گرفته می شود tproger- من عزیزسایت در مورد برنامه نویسی!

    این به دلیل این واقعیت است که به طور پیش فرض کمیت بر اساس به اصطلاح کار می کند. حریصالگوریتم - سعی می کند طولانی ترین رشته ممکن را که با شرایط مطابقت دارد برگرداند. دو راه برای حل مشکل وجود دارد. اولین مورد استفاده از عبارت است

    <[^>]*> که مانع از حق می شود براکت زاویه. دوم این است که کمیت را نه حریص، اما اعلام کنیم تنبل. آیا این کار با اضافه کردن یک کاراکتر در سمت راست کمیت انجام می شود؟ . آن ها برای جستجوی همه تگ ها، عبارت تبدیل به<.*?> .

    کمیت حسودی

    گاهی اوقات، برای افزایش سرعت جستجو (مخصوصاً در مواردی که رشته با عبارت منظم مطابقت ندارد)، می‌توانید از الگوریتم برای جلوگیری از بازگشت الگوریتم به مراحل قبلی جستجو استفاده کنید تا مطابقت‌های احتمالی را برای بقیه موارد پیدا کنید. عبارت منظم. نامیده می شود حسودکمی سازی کمیت با افزودن یک نماد در سمت راست آن حسادت می کند

    یکی دیگر از کاربردهای سنجش حسادت، حذف تطابقات ناخواسته است. بنابراین، الگوی ab*+a در رشته "ababa" فقط با سه کاراکتر اول مطابقت دارد، اما نه با کاراکترهای سوم تا پنجم، زیرا کاراکتر "a" که در جایگاه سوم قرار دارد، قبلا برای اولین نتیجه استفاده شده است.

    گروه های براکت

    برای الگوی استیضاح "خنداننده" ما، بسیار کمی باقی مانده است - باید در نظر گرفت که حرف "x" می تواند بیش از یک بار رخ دهد، به عنوان مثال، "هاهاهاهاهاهاهو"، یا حتی ممکن است با حرف "x" پایان یابد. احتمالاً یک کمیت برای گروه باید در اینجا اعمال شود

    [aioe]+x، اما اگر فقط [aioe]x+ را بنویسیم، کمیت + فقط به کاراکتر "x" اشاره خواهد کرد و نه به کل عبارت. برای رفع این مشکل، عبارت باید در پرانتز قرار گیرد: ([aioe]x)+.

    بنابراین بیان ما می شود

    [Xx]([aioe]x?)+ - ابتدا یک "x" بزرگ یا کوچک می آید، و سپس یک عدد دلخواه غیر صفر از مصوت ها، که (احتمالا، اما نه لزوما) با یک "x" کوچک در هم آمیخته می شوند. با این حال، این عبارت فقط تا حدی مشکل را حل می کند - مانند خطوطی مانند "ههههه" نیز زیر این عبارت قرار می گیرد - ممکن است کسی اینطور بخندد، اما این فرض بسیار مشکوک است. بدیهی است که مجموعه تمام حروف صدادار را فقط یک بار می توانیم استفاده کنیم و سپس باید به نحوی به نتیجه جستجوی اول تکیه کنیم. اما چگونه؟…

    ذخیره نتیجه جستجو بر اساس گروه (بازخورد)

    به نظر می رسد که نتیجه جستجوی گروه براکت در یک مکان حافظه جداگانه نوشته می شود که دسترسی به آن برای استفاده در قسمت های بعدی عبارت منظم در دسترس است. با بازگشت به وظیفه یافتن برچسب های HTML در یک صفحه، ممکن است نیاز داشته باشیم که نه تنها برچسب ها را پیدا کنیم، بلکه نام آنها را نیز پیدا کنیم. این می تواند به ما کمک کند عبارت منظم

    <(.*?)> .

    tproger- من عزیزسایت در مورد برنامه نویسی!

    نتیجه جستجو برای تمام عبارات منظم: "

    », « », «», « », «», «

    ».
    نتیجه جستجو برای گروه اول: "p"، "b"، "/b"، "i"، "/i"، "/i"، "/p".

    نتیجه جستجوی گروهی را می توان با استفاده از یک عبارت ارجاع داد

    \n، که در آن n عددی از 1 تا 9 است. برای مثال، عبارت (\w)(\w)\1\2 با رشته های "aaaa"، "abab" مطابقت دارد، اما با "aabb" مطابقت ندارد.

    اگر عبارت فقط برای اعمال یک کمیت به آن در پرانتز گرفته شود (برنامه ریزی نشده است که نتیجه جستجوی این گروه را به خاطر بسپارید)، بلافاصله اولین براکت باید اضافه شود.

    ?:، برای مثال (?:+\w).

    با استفاده از این مکانیسم، می توانیم عبارت خود را در فرم بازنویسی کنیم

    [Xx]([aoie])x?(?:\1x?)* .

    شمارش

    برای بررسی اینکه آیا یک رشته حداقل یکی از الگوها را برآورده می کند، می توانید از آنالوگ عملگر بولی OR استفاده کنید که با استفاده از نماد نوشته شده است.

    | . بنابراین، الگوی Anna|Loneliness به ترتیب شامل رشته های «آنا» و «تنهایی» است. استفاده از enum ها در داخل گروه های براکت بسیار راحت است. بنابراین، برای مثال (?:a|b|c|d) کاملاً معادل است (در این موردگزینه دوم به دلیل کارایی و خوانایی ارجح است).

    با استفاده از این عملگر، می‌توانیم توانایی تشخیص خنده مانند «آهاها» را به عبارت منظم خود اضافه کنیم - تنها پوزخندی که با یک مصوت شروع می‌شود:

    [Xx]([aoie])x?(?:\1x?)*|[Aa]x?(?:ah?)+

    خدمات مفید

    شما می توانید با استفاده از سرویس هایی مانند RegExr، Regexpal یا Regex101، بیان منظم خود را روی برخی از متن ها بدون نوشتن کد تمرین و یا آزمایش کنید. دومی، علاوه بر این، توضیح مختصری از نحوه عملکرد regex می دهد.

    می توانید با کمک سرویس Regexper بفهمید که چگونه یک عبارت منظم که به دست شما افتاده است - می تواند نمودارهای قابل درک برای یک عبارت منظم بسازد.

    RegExp Builder - سازنده بصری توابع جاوا اسکریپتبرای کار با عبارات منظم

    0

    0

    اصلاح کننده ها

    کاراکتر منهای (-) قبل از یک اصلاح کننده (به استثنای U) نفی آن را ایجاد می کند.

    شخصیت های خاص

    آنالوگشرح
    () الگوی فرعی، عبارت تودرتو
    عام
    (الف، ب) تعداد وقوع از "الف" تا "ب"
    | منطقی "یا"، در مورد جایگزین های تک کاراکتری، استفاده کنید
    \ فرار شخصیت خاص
    . هر کاراکتری به جز خط جدید
    \d رقم اعشاری
    \ D[^\d]هر کاراکتری غیر از رقم اعشاری
    \f پایان (شکستن) صفحه
    \n ترجمه خطی
    \pL هنگام استفاده از اصلاح کننده u، حرف رمزگذاری شده UTF-8
    \r برگشت محموله
    \s[\t\v\r\n\f]شخصیت فضایی
    \S[^\s]هر شخصیتی به جز پرومل
    \ t توقف زبانه
    \w هر عدد، حرف یا خط زیر
    \ W[^\w]هر کاراکتری غیر از عدد، حرف یا خط زیر
    \ v زبانه عمودی

    کاراکترهای ویژه در یک کلاس کاراکتر

    موقعیت در یک رشته

    مثالمکاتبهشرح
    ^ ^ aآ aaaaشروع خط
    $ یک دلارآآآ آآ آ آخر خط
    \Aaآ aaaa
    آآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآال
    ابتدای متن
    \za\zآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآال
    آآآ آآ آ
    انتهای متن
    \ba\b
    \با
    aa آ aa آ
    آ aa آ aa
    مرز کلمه، ادعا: کاراکتر قبلی یک کلمه است، اما بعدی نیست، یا برعکس
    \ B\Ba\Bآ آ a آآبدون مرز کلمه
    \G\GAaaa aaaجستجوی موفق قبلی، جستجو در موقعیت 4 متوقف شد - جایی که a یافت نشد
    دانلود به صورت PDF، PNG.

    لنگرها

    لنگرها در عبارات منظم شروع یا پایان چیزی را نشان می دهند. به عنوان مثال، خطوط یا کلمات. آنها با نمادهای خاصی نشان داده می شوند. به عنوان مثال، یک الگوی مطابق با رشته ای که با یک عدد شروع می شود به شکل زیر است:

    در اینجا کاراکتر ^ شروع یک خط را نشان می دهد. بدون آن، الگو با هر رشته ای که دارای یک رقم باشد مطابقت دارد.

    کلاس های شخصیت

    کلاس های کاراکتر در عبارات منظم به طور همزمان با مجموعه خاصی از کاراکترها مطابقت دارند. برای مثال، \d با هر رقمی از 0 تا 9 منطبق است، \w با حروف و اعداد مطابقت دارد و \W با همه کاراکترها به جز حروف و اعداد مطابقت دارد. الگوی شناسایی حروف، اعداد و فاصله ها به شکل زیر است:

    POSIX

    POSIX افزودنی نسبتاً جدید به خانواده عبارات منظم است. ایده، مانند کلاس های کاراکتر، استفاده از اختصاراتی است که نشان دهنده گروهی از کاراکترها هستند.

    بیانیه

    در ابتدا، تقریباً همه در درک عبارات مشکل دارند، اما با آشنایی بیشتر با آنها، اغلب از آنها استفاده خواهید کرد. ادعاها راهی برای گفتن "من می خواهم هر کلمه ای را در این سند پیدا کنم که شامل حرف "q" است که "werty" به دنبال آن نباشد".

    [^\s]*q(?!werty)[^\s]*

    کد بالا با جستجوی هر کاراکتری به غیر از فاصله ([^\s]*) و سپس q شروع می شود. تجزیه کننده سپس به عبارت "به جلو نگاه کردن" می رسد. این به طور خودکار عنصر قبلی (شخصیت، گروه یا کلاس کاراکتر) را مشروط می‌کند - فقط در صورتی که ادعا درست باشد، با الگو مطابقت دارد. در مورد ما، گزاره منفی است (؟!)، یعنی اگر چیزی که به دنبال آن است پیدا نشود، درست خواهد بود.

    بنابراین، تجزیه کننده چند کاراکتر بعدی را مطابق با الگوی پیشنهادی (werty) بررسی می کند. اگر آنها پیدا شوند، عبارت نادرست است، به این معنی که کاراکتر q "نادیده گرفته می شود"، یعنی با الگو مطابقت نخواهد داشت. اگر werty پیدا نشد، آن گزاره درست است و همه چیز با q خوب است. سپس به جستجوی هر کاراکتری غیر از فاصله ([^\s]*) ادامه می‌دهد.

    کمیت کننده ها

    کمی سازها به شما امکان می دهند بخشی از یک الگو را تعریف کنید که باید چندین بار پشت سر هم تکرار شود. به عنوان مثال، اگر می خواهید بدانید که آیا یک سند دارای رشته ای از 10 تا 20 (شامل) حرف "a" است، می توانید از این الگو استفاده کنید:

    A (10،20)

    به طور پیش فرض، کمیت کننده ها حریص هستند. بنابراین، کمیت + به معنای "یک یا چند بار" با حداکثر مقدار ممکن مطابقت دارد. گاهی اوقات این باعث ایجاد مشکلاتی می‌شود، و سپس می‌توانید با استفاده از یک اصلاح‌کننده خاص به کمیت‌کننده بگویید که حریص نباشد ("تنبل" شود). به این کد نگاه کنید:

    ".*"

    این الگو با متن محصور شده در دو نقل قول مطابقت دارد. با این حال، خط اصلی شما ممکن است چیزی شبیه به این باشد:

    سلام دنیا

    الگوی بالا زیر رشته زیر را در این رشته پیدا می کند:

    "helloworld.htm" title="Hello World" !}

    او بیش از حد حریص بود و بزرگترین متنی را که می توانست ثبت کرد.

    ".*?"

    این الگو همچنین با هر نویسه ای که در گیومه های دوتایی قرار گرفته اند مطابقت دارد. اما نسخه تنبل (به اصلاح‌کننده توجه کنید؟) به دنبال کوچک‌ترین رخداد ممکن می‌گردد، و بنابراین هر زیررشته‌ای که دوبار نقل‌قول شده است را به‌صورت جداگانه پیدا می‌کند:

    "helloworld.htm" "سلام جهان"

    فرار در عبارات منظم

    عبارات منظم از برخی کاراکترها برای نشان دادن قسمت های مختلف یک الگو استفاده می کنند. با این حال، اگر بخواهید یکی از این کاراکترها را در یک رشته به عنوان یک کاراکتر معمولی پیدا کنید، مشکلی وجود دارد. برای مثال، یک نقطه در یک عبارت منظم به معنای "هر کاراکتری به جز شکستن خط" است. اگر نیاز به یافتن نقطه در یک رشته دارید، نمی توانید فقط از " استفاده کنید. » به عنوان عام - این تقریباً همه چیز را پیدا می کند. بنابراین، باید به تجزیه کننده بگویید که این نقطه باید به عنوان یک نقطه معمولی در نظر گرفته شود و نه "هر کاراکتری". این کار با یک شخصیت فرار انجام می شود.

    یک کاراکتر فرار قبل از یک کاراکتر مانند یک نقطه باعث می شود که تجزیه کننده عملکرد آن را نادیده بگیرد و با آن به عنوان یک کاراکتر عادی رفتار کند. چندین کاراکتر وجود دارد که در اکثر قالب ها و زبان ها به چنین فراری نیاز دارند. می توانید آنها را در گوشه سمت راست پایین برگه تقلب ("Meta Symbols") پیدا کنید.

    الگوی یافتن نقطه این است:

    \.

    سایر کاراکترهای خاص در عبارات منظم با عناصر غیر معمول در متن مطابقت دارند. به عنوان مثال، خطوط شکسته و برگه ها را می توان از صفحه کلید تایپ کرد، اما احتمالاً زبان های برنامه نویسی را اشتباه می گیرد. کاراکتر فرار در اینجا استفاده می شود تا به تجزیه کننده بگوید که کاراکتر بعدی را به عنوان یک کاراکتر خاص و نه به عنوان یک حرف یا عدد معمولی در نظر بگیرد.

    فرار از کاراکترها در عبارات منظم

    تعویض رشته

    جایگزینی رشته در قسمت بعدی «گروه ها و محدوده ها» به تفصیل توضیح داده شده است، اما وجود گروه های «غیرفعال» در اینجا باید ذکر شود. اینها گروه هایی هستند که هنگام جایگزینی نادیده گرفته می شوند، که اگر می خواهید از شرط "یا" در قالب استفاده کنید، اما نمی خواهید این گروه در جایگزینی شرکت کند بسیار مفید است.

    گروه ها و محدوده ها

    گروه ها و محدوده ها بسیار بسیار مفید هستند. احتمالاً شروع با محدوده ها آسان تر است. آنها به شما اجازه می دهند مجموعه ای از کاراکترهای مناسب را مشخص کنید. به عنوان مثال، برای بررسی اینکه آیا یک رشته حاوی است یا خیر ارقام هگزادسیمال(0 تا 9 و A تا F)، محدوده زیر باید استفاده شود:

    برای آزمایش مخالف، از یک محدوده منفی استفاده کنید، که در مورد ما با هر کاراکتری به جز اعداد از 0 تا 9 و حروف از A تا F مطابقت دارد:

    [^A-Fa-f0-9]

    گروه ها اغلب زمانی استفاده می شوند که یک شرط "یا" در یک الگو مورد نیاز باشد. زمانی که باید به بخشی از یک الگو از قسمت دیگری از آن مراجعه کنید. و همچنین هنگام جایگزینی رشته ها.

    استفاده از "یا" بسیار ساده است: الگوی زیر به دنبال "ab" یا "bc" است:

    اگر نیاز به مراجعه به هر یک از گروه های قبلی در عبارت منظم دارید، باید از \n استفاده کنید، جایی که به جای n، عدد را جایگزین کنید. گروه مورد نظر. ممکن است الگویی بخواهید که با حروف "aaa" یا "bbb" و سپس یک عدد و سپس همان سه حرف مطابقت داشته باشد. این الگو با استفاده از گروه ها اجرا می شود:

    (aaa|bbb)+\1

    بخش اول الگوی "aaa" یا "bbb" را جستجو می کند و حروف پیدا شده را در یک گروه ترکیب می کند. این با جستجوی یک یا چند رقم (+) و در نهایت \1 دنبال می شود. قسمت آخر قالب به گروه اول اشاره دارد و به دنبال همان است. به جای تطبیق با متنی که قبلاً توسط قسمت اول الگو پیدا شده است به دنبال تطابق است. بنابراین "aaa123bbb" با الگوی بالا مطابقت نخواهد داشت، زیرا \1 بعد از عدد به دنبال "aaa" می‌گردد.

    یکی از مهمترین ابزار مفیددر عبارات منظم جایگزینی رشته است. هنگام جایگزینی متن، می توانید با استفاده از $n به گروه یافت شده مراجعه کنید. فرض کنید می خواهید تمام کلمات "آرزو" را در متن خود پررنگ کنید. برای انجام این کار، باید از تابع جایگزین عبارت منظم استفاده کنید که ممکن است به شکل زیر باشد:

    جایگزین (الگو، جایگزین، موضوع)

    پارامتر اول چیزی شبیه به این خواهد بود (شاید به چند کاراکتر اضافی برای این تابع خاص نیاز داشته باشید):

    ([^A-Za-z0-9])(آرزو)([^A-Za-z0-9])

    هر کلمه "آرزو" را به همراه کاراکترهای قبلی و بعدی پیدا می کند، مگر اینکه حروف یا عدد باشند. سپس جایگزینی شما می تواند به این صورت باشد:

    $1$2$3

    این جایگزین کل رشته ای است که توسط الگو پیدا شده است. ما جایگزینی را با اولین کاراکتر یافت شده (که یک حرف یا عدد نیست) شروع می کنیم و آن را با $1 علامت گذاری می کنیم. بدون آن، ما به سادگی این شخصیت را از متن حذف می کنیم. همین امر در مورد پایان تعویض (3 دلار) نیز صدق می کند. در وسط اضافه کردیم تگ HTMLبرای پررنگ (البته، می توانید به جای یا از CSS استفاده کنید ، برجسته کردن گروه دوم که توسط الگو ($2) یافت می شود.

    در اینجا چند نمونه از عبارات منظم آورده شده است.

      karova - بدیهی است، الگویی که کلمه karova برای آن مناسب است.

      \b(shift|unshift|pop|push|splice)\b - هر یک از کلمات فهرست شده.

      ^\s+ - یک یا چند فاصله یا تب در ابتدای یک خط.

    در عبارات منظم، کاراکترهای الفبایی عددی معمولاً خود را نشان می دهند. به عنوان مثال، الگوی Hello می گوید به دنبال کاراکتر H و به دنبال آن e و سپس l و غیره بگردید.

    اگر مشخص کردن یک کاراکتر به معنای واقعی کلمه دشوار یا ناخوشایند است، می توانید از لفظ هایی که قبلاً برای ما شناخته شده است استفاده کنید: \n ، \t و دیگران. این بدان معنی است که کاراکتر \ در یک عبارت منظم دیگر نمی تواند برای خود ایستاده باشد، زیرا معنای کاراکتر زیر آن را تغییر می دهد: به ویژه، حرف n، همراه با کاراکتر بک اسلش قبلی، کاراکتر انتهای خط را نشان می دهد. . اگر می‌خواهید کاراکتر \ را در الگو قرار دهید، باید از حرف \\ استفاده کنید.

    نمادهای دیگری نیز وجود دارند که به جای نشان دادن خود، در الگوها معنای خاصی پیدا می کنند. چنین نمادهایی نامیده می شوند متا شخصیت ها. در اینجا چند نمونه از متاکراکترها، بدون اشاره به معنای خاص آنها آورده شده است (لیست کامل نیست): \.-()()?*+^$| .

    برخی از شخصیت ها همیشه متا شخصیت نیستند، اما فقط زمانی که در یک زمینه خاص قرار می گیرند. برخی فراکاراکترها بسته به زمینه، معانی مختلفی دارند.

    اگر می خواهید یک متاکاراکتر را در یک عبارت منظم وارد کنید و معنای خاصی را از آن سلب کنید، باید از آن محافظت کنید ( سپر) با گذاشتن یک بک اسلش در مقابل آن. به عنوان مثال، علامت مثبت در یک عبارت منظم به صورت \+ درج می شود.

    این الگو یکی از کاراکترهای فهرست شده در پرانتز را نشان می دهد. برای مثال، اگر به کلمه Hello علاقه مند باشیم، چه با حروف بزرگ یا کوچک، الگوی آن به این صورت خواهد بود: ello. در اینجا یک الگو برای یک واکه کوچک در الفبای انگلیسی آمده است: . مثال دیگر یک کلاس کاراکتر است که از هر دو تشکیل شده است براکت های مربع: [\[\]] .

    اگر کلاس کاراکتر شامل کاراکترهای متوالی در جدول کد باشد، کافی است اولین و آخرین کاراکتر را با قرار دادن خط فاصله بین آنها مشخص کنید. به عنوان مثال، کلاسی که هر رقم اعشاری را نشان می دهد را می توان به صورت . یک حرف از الفبای انگلیسی به صورت (در اینجا ما بر این واقعیت تکیه می کنیم که در هر جدول کد بزرگ و کوچک حروف انگلیسیدر بلوک های پیوسته بروید به ترتیب حروف الفبا; با این حال، بلوک حروف کوچک بلافاصله پس از بلوک حروف بزرگ نمی آید).

    ممکن است یک کلاس کاراکتر متشکل از همه کاراکترها به جز موارد ذکر شده تعریف شود - به اصطلاح نفی کلاس شخصیت. برای انجام این کار، بلافاصله پس از باز شدن براکت قبل از شمارش، علامت circumflex ^ درج می شود. هر کاراکتری که یک رقم نباشد را می توان به صورت [^0-9] نشان داد.

    نمادهای ویژه ای برای برخی از کلاس های شخصیت های محبوب وجود دارد:

    هنگامی که یک رشته با موفقیت با یک عبارت منظم مطابقت دارد، هر کاراکتر یا کلاس کاراکتر در الگو با یک کاراکتر در رشته مطابقت دارد. اما ساختارهایی وجود دارد که نشان دهنده حضور یک کاراکتر خاص نیست، بلکه یک مکان خاص (خالی) در یک رشته است. چنین ساختارهایی نامیده می شوند اتصالات، یا لنگرها

    متداول ترین لنگرها لنگرهایی در ابتدا (^) و انتهای ($) یک رشته هستند. لنگر به ابتدای یک رشته باید در ابتدای الگو قرار داده شود و یک لنگر تا انتهای آن باید در انتهای آن قرار گیرد.

    به عنوان مثال، کلمات روسی مانند پادزهر، ضد یهود یا پادذره با الگوی ^anti مطابقت دارند. بدون صحافی، خطوطی که با "ضد" شروع نمی شوند، اما حاوی ترکیبی از حروف در داخل هستند، به عنوان مثال، مرکانتیلیسم، نیز مناسب خواهند بود. برای جستجوی کلماتی که به "-tsya" ختم می شوند، به الگوی tsya $ نیاز دارید (ما تقریباً 100٪ مطمئن هستیم که همه این کلمات افعال بازتابی در مصدر هستند). هیچ چیز مانع از استفاده از هر دوی این اتصالات در قالب نمی شود.

    یکی دیگر از لنگرهای مفید، لنگر به مرز بین کلمات \b است. این مکان در رشته ای که بین کاراکترهایی است که یکی از آنها \w و دیگری \W است (به هر ترتیب) مطابقت دارد. این لنگر همچنین می تواند با ابتدا یا انتهای رشته مطابقت داشته باشد (در این مورد، در نظر گرفته می شود که اصطلاح، همانطور که بود، توسط کاراکترهای خیالی از کلاس \W احاطه شده است).

    اگر ما به دنبال قطعه ای هستیم که باید با یکی از چندین الگو مطابقت داشته باشد، باید این الگوها را فهرست کنیم و آنها را با یک نوار عمودی از هم جدا کنیم | . مثلا دوشنبه|سه شنبه|چهارشنبه|پنجشنبه|جمعه|شنبه|یکشنبه. برای اینکه فهرست جایگزین ها به یک واحد مستقل تبدیل شود و آن را از همسایه ها جدا کند، باید آن را در داخل پرانتز قرار داد. به عنوان مثال، الگوی Respect(th|aya) به معنای رشته Respect و به دنبال آن یکی از رشته های й یا а است. بدون پرانتز، الگوی Dear|aya یکی از رشته های Dear یا aya را نشان می دهد. پرانتز یک عارضه جانبی مهم دارد که در قسمت Grouping and Capturing به آن پرداخته خواهد شد.

    به منظور نشان دادن چند بار تکرار یک الگو، به اصطلاح کمیت کننده ها(از کلمه لاتین کوانتومی- چند تا):

    کمیت کننده های * ، + و؟ اضافی هستند زیرا می توان آنها را با استفاده از بریس های فرفری به طور متفاوت بیان کرد. یعنی * معادل (0،) است، + معادل (1،) است، ها؟ همان (0،1) است. اما این کمیت‌کننده‌ها اغلب مورد استفاده قرار می‌گیرند، و این سزاوار تعیین‌های جداگانه است.

    اگر الگویی که کمیت به آن اعمال می شود چیزی پیچیده تر از یک کاراکتر یا کلاس کاراکتر است، باید در پرانتز قرار گیرد.

    در اینجا چند نمونه آورده شده است:

      ^\d+$ - دنباله ای از یک یا چند رقم اعشاری (الگوی اعداد صحیح غیر منفی در نماد دهی).

      ^\-?\d+$ - یکسان است، اما برای همه اعداد صحیح (احتمالا منفی).

      ^\-?(\d+(\.\d*)?|\.\d+)$ - الگوی اعداد واقعی.

    بیایید نگاهی دقیق تر به آخرین مثال بیندازیم. علاوه بر منهای اختیاری در ابتدا، الگو شامل گروهی با دو گزینه است: \d+(\.\d*)؟ و \.\d+. آیا اولین گزینه شامل یک قسمت عدد صحیح اجباری \d+ (حداقل یک رقم) و به دنبال آن یک قسمت کسری اختیاری (\.\d*) است؟ . قسمت کسری، در صورت وجود، دارای یک نقطه اعشار و احتمالاً تعدادی رقم است. بنابراین، خطوط 15، 15.، 15.487 با این جایگزین مطابقت دارند. جایگزین دیگری برای رشته هایی به شکل .618 با یک قسمت صحیح از دست رفته مورد نیاز است - در بسیاری از زبان های رایانه ای این نماد حق وجود دارد.

    اگر ساده‌ترین عناصر یک عبارت منظم - کاراکترها، کلاس‌های کاراکتر و لنگرها - در یک ردیف نوشته شوند، به این معنی است که هنگام جستجوی یک رشته برای یک الگو، این عناصر با قسمت‌هایی از رشته به‌طور متوالی و در همان ترتیب مطابقت داده می‌شوند. . در صورت اعمال گزینه های جایگزین، این دستور نقض می شود. می توانید تصور کنید که یک عبارت منظم مرکب از ساده ترین آنها با استفاده از دو عمل ساخته شده است: الحاق ( ترکیبات) و جایگزین ها. ترکیب یک آنالوگ از عملیات ضرب در حساب است. جایگزین مشابه با اضافه است. اولین شباهت به حساب این است که عملگر جایگزین اولویت کمتری نسبت به ترکیب دارد، بنابراین ممکن است مانند Respect برای گروه بندی پرانتز لازم باشد.

    توجه داشته باشید

    بسیاری از قوانین حسابی، هرچند نه همه، برای عبارات منظم نیز اعمال می شود:

    جایگزینی جایگزین x | y=y | ایکس؛ انجمن جایگزین x | y | z=x | y | z انجمن ترکیب x y ⁣ z = x y y z ; توزیع جایگزین با توجه به ترکیب (چپ و راست) x⁣ y | z = x⁣ y | x ⁣ z، x | y ⁣ z = x ⁣ z | y z .

    در این حساب عجیب عبارات منظم، قانون جابجایی برای ترکیب برقرار نیست. علاوه بر این، به دلیل رابطه آشکار x |، آنالوگ صفر وجود ندارد x = x. نقش واحد (راست و چپ) برای ترکیب توسط قالب خالی(آن را با 𝟙 نشان می دهیم): 𝟙 ⁣ x = x ⁣ 𝟙 = x . کمیت کننده های شکل ( n ) نقش افزایش به توان n را ایفا می کنند.

    علاوه بر تابع گروه بندی، براکت ها عملکرد ضبط را نیز انجام می دهند. نتیجه اصلی تطبیق یک رشته با یک الگو، پاسخ به این سوال است: آیا رشته با الگو مطابقت دارد؟ اما، علاوه بر این، اغلب لازم است مشخص شود که کدام قطعه یا قطعات یک رشته با قطعات خاصی در یک عبارت منظم آمده است.

    یا شاید اتیلن دی آمین - N N N 'N ' -تترااستیک اسید؟

    مثالی را در نظر بگیرید که در آن به اسیدهای مختلف در متن اشاره شده است. خاطرات مدرسه ما از شیمی ما را به این ایده سوق داد که نام اسیدها یا به vai یا نایا یا به تای ختم می شود و بعد از یک فاصله کلمه اسید به دنبال آن می آید. ما یک الگو می سازیم: \S+[vnt]th اسید. متن را با الگو مطابقت دهید. شانس! اما، تعجب می کند که چه نوع اسیدی در متن ذکر شده است؟ نمک؟ بابونه؟ نیتروژن؟ پلاویکووا؟ کلریک؟ کلر؟ هیپوکلری؟ لیمو؟ پروسیک؟ دئوکسی ریبونوکلئیک؟

    اینجاست که عکس گرفتن به کار می آید. قسمتی از قالب را که طبق نقشه ما باید با نام مطابقت داشته باشد، در پرانتز قرار می دهیم: (\S+[int]th) acid. سپس دستگاه، با یافتن ذکر اسید در متن، نام خود را (آنچه مربوط به قطعه قالب محصور شده در پرانتز است) در یک متغیر خاص ذخیره می کند - بافر ضبط

    یک عبارت منظم می تواند شامل چندین گروه ضبط باشد. چنین گروه هایی نه تنها می توانند از یکدیگر پیروی کنند، بلکه می توانند در یکدیگر لانه کنند. به عبارت دیگر، عبارت منظم باید در برابر پرانتز به همان معنایی که در فصل 23 بحث شد، متعادل شود. بررسی تعادل پرانتز” (البته، این فقط در مورد پرانتزهایی صدق می کند که هدف گروه بندی و گرفتن را دارند؛ پرانتزهایی که قبل از علامت معکوس قرار می گیرند بر تعادل گروه تأثیر نمی گذارند). اگر جستجو موفقیت آمیز باشد، هر گروه بخشی از متن را می گیرد: اولی - در بافر اول، دومی - در دومی و غیره. وقتی گروه ها در داخل یکدیگر قرار می گیرند چگونه شماره گذاری می شوند؟ شماره گذاری به ترتیب ظاهر شدن پرانتزهای باز است:

    2 4 5 ┝┑ ┝┑┝┑ (()(()())) │ ┝━━━━┙│ │ 3 │ ┝━━━━━━━━┙ 1

    در صورت تمایل، گروه را می توان از شماره گذاری حذف کرد، یعنی آن را از تابع "گرفتن" محروم کرد و فقط تابع گروه بندی را باقی گذاشت. برای این کار به جای جداکننده های گروه (⋯) از ( ?: ⋯). اینجا یک علامت سوال هست نهیک کمیت کننده را نشان می دهد زیرا قبل از کمیت باید یک کاراکتر، یک کلاس کاراکتر یا یک گروه وجود داشته باشد.

    استفاده از گروه‌های ثبت شماره‌دار همیشه راحت نیست، به خصوص در عبارات منظم بزرگ. تنها کاری که باید انجام دهید این است که آن را در قالب قرار دهید. گروه جدیدگرفتن به عنوان شماره گذاری به بیراهه می رود. سپس باید در تمام مکان‌های برنامه که بافرهای ضبط توسط اعداد قابل دسترسی هستند، اصلاحاتی انجام دهید. اما می توانید نامی را با گروه مرتبط کنید، که به شما امکان می دهد به بافر مربوطه با این نام مراجعه کنید. جداکننده ها برای ایجاد یک گروه با نام استفاده می شوند ( ? ⋯)، که در آن نام مورد نظر جایگزین نام می شود.

    بخش هایی از رشته که در بافرها گرفته شده اند به دو صورت قابل استفاده هستند. اول، برنامه ای که از یک عبارت منظم برای جستجو یا جایگزینی استفاده می کند، می تواند به بافرها به عنوان متغیرهای ویژه دسترسی داشته باشد. این استفاده در بخش Find and Replace Operators مورد بحث قرار خواهد گرفت. دومین امکان این است که از ارجاعات گروهی به طور مستقیم در عبارت منظم استفاده کنید، به بخش "پیوندهای برگشتی" مراجعه کنید.

    مشکل پیدا کردن کلمات حاوی سه مصوت یکسان را در یک ردیف در نظر بگیرید. راه حل ساده [aeeyoueyuya](3) با استفاده از کمیت سازها کار نخواهد کرد، زیرا این الگو رشته هایی را با سه مصوت متوالی مطابقت می دهد، اما لزوماً یکسان نیست. یک تصمیم هیولایی با فهرست کاملی از گزینه‌ها، aaa | eee | eee | eee | ooo | uuu | اوه | yuuyu | یای، ما با عصبانیت رد می‌کنیم: به هر حال، ارزش دارد که یک کلاس شخصیتی دیگر و گسترده‌تر را انتخاب کنیم یا سه گانه را جایگزین کنیم. در کمیت با مقدار بزرگتر، مانند اندازه الگو به طور فاجعه باری رشد خواهد کرد.

    با این حال، یک راه حل زیبا با استفاده از گروه های گرفتن امکان پذیر است. بیایید مصوت را در یک گروه ضبط کنیم و سپس به محتویات بافر ضبط رجوع کنیم. ارجاع به بافرهای اول، دوم، سوم در عبارت منظم به صورت \g1، \g2، \g3 نوشته می‌شود. بنابراین، راه حل الگوی ([aeeyoueya])\g1(2) خواهد بود. توجه داشته باشید که ارجاع به بافر ضبط باید از گروه مطابق در عبارت منظم پیروی کند.

    مراجع برگشتی نه تنها می توانند به بافرهای شماره گذاری شده، بلکه به بافرهای نامگذاری شده نیز اشاره داشته باشند. چنین پیوندهایی به شکل \k هستند ، جایی که، دوباره، به جای نام یک نام خاص وجود دارد. مثال ما را می توان با استفاده از گروه های نامگذاری شده بازنویسی کرد: (? [aeeyoueyuya])\k {2} (حرف صدادار- حرف صدادار).

    گاهی اوقات نیاز به جستجویی است که حروف کوچک و بزرگ را تشخیص نمی دهد. چنین جستجویی نامیده می شود مورد غیر حساس (حساس به حروف کوچک و بزرگ). به جای جایگزینی حروف در همه جای الگو با کلاس های دو حرفی (a → , b → , …)، فقط الگو را در داخل آن قرار دهید. گروه ویژه، که شامل حالت جستجوی غیر حساس به حروف بزرگ و کوچک است: (? من:⋯). چنین گروهی گروه اسیر نیست. اگر قرار است جستجوی بدون حروف بزرگ فقط در بخشی از عبارت منظم اجرا شود، تنها قسمت مورد نظر باید در گروه قرار گیرد.

    برعکس، اگر بخشی از عبارت منظم، که در آن جستجوی غیرحساس به حروف بزرگ و کوچک انجام می‌شود، نیاز به خاموش کردن این حالت داشته باشد، می‌توانید با استفاده از گروه به جستجوی معمولی و حساس به حروف کوچک و بزرگ بازگردید ( ؟-من: ⋯) .

    حالت‌های حساس/غیر حساس فقط حروف را تحت تأثیر قرار می‌دهند. چه چیزی به عنوان یک حرف حساب می شود و چه چیزی که به حساب نمی آید، مختص زبان است، همانطور که قوانین تطبیق بین حروف بزرگ و کوچک نیز وجود دارد. از نظر زبان انگلیسی، برای مثال، علامت Щ یک حرف نیست، در آلمانی، حرف ß وجود دارد (به هر حال، نسخه بزرگ این حرف از دو حرف SS تشکیل شده است: Carl Friedrich Gauß → کارل فریدریش گاوس).

    برگه تقلب یک راهنمای کلی برای الگوهای بیان منظم بدون توجه به ویژگی های هر زبان است. این در قالب یک جدول ارائه شده است که بر روی یک برگه A4 چاپ شده قرار می گیرد. ایجاد شده تحت مجوز Creative Commons بر اساس یک برگه تقلب توسط Dave Child ().

    به یاد بیاور زبان های مختلفزبان های برنامه نویسی از عبارات منظم به درجات مختلف پشتیبانی می کنند، بنابراین ممکن است در موقعیتی قرار بگیرید که برخی از این ویژگی ها کار نکنند. برای کسانی که به تازگی با عبارات منظم آشنا می شوند، این ترجمه از نظرات نویسنده به برگه تقلب ارائه می شود. شما را با برخی از تکنیک های مربوط به ایجاد الگوهای بیان منظم آشنا می کند.

    لنگرها در عبارات منظم شروع یا پایان چیزی را نشان می دهند. به عنوان مثال، خطوط یا کلمات. آنها با نمادهای خاصی نشان داده می شوند. به عنوان مثال، یک الگوی مطابق با رشته ای که با یک عدد شروع می شود به شکل زیر است:

    در اینجا کاراکتر ^ شروع یک خط را نشان می دهد. بدون آن، الگو با هر رشته ای که دارای یک رقم باشد مطابقت دارد.

    کلاس های کاراکتر در عبارات منظم به طور همزمان با مجموعه خاصی از کاراکترها مطابقت دارند. برای مثال، \d با هر رقمی از 0 تا 9 منطبق است، \w با حروف و اعداد مطابقت دارد و \W با همه کاراکترها به جز حروف و اعداد مطابقت دارد. الگوی شناسایی حروف، اعداد و فاصله ها به شکل زیر است:

    POSIX

    POSIX افزودنی نسبتاً جدید به خانواده عبارات منظم است. ایده، مانند کلاس های کاراکتر، استفاده از اختصاراتی است که نشان دهنده گروهی از کاراکترها هستند.

    در ابتدا، تقریباً همه در درک عبارات مشکل دارند، اما با آشنایی بیشتر با آنها، اغلب از آنها استفاده خواهید کرد. ادعاها راهی برای گفتن "من می خواهم هر کلمه ای را در این سند پیدا کنم که شامل حرف "q" است که "werty" به دنبال آن نباشد".

    [^\s]*q(?!werty)[^\s]*

    کد بالا با جستجوی هر کاراکتری به غیر از فاصله ([^\s]*) و سپس q شروع می شود. تجزیه کننده سپس به عبارت "به جلو نگاه کردن" می رسد. این به طور خودکار عنصر قبلی (شخصیت، گروه یا کلاس کاراکتر) را مشروط می‌کند - فقط در صورتی که ادعا درست باشد، با الگو مطابقت دارد. در مورد ما، گزاره منفی است (؟!)، یعنی اگر چیزی که به دنبال آن است پیدا نشود، درست خواهد بود.

    بنابراین، تجزیه کننده چند کاراکتر بعدی را مطابق با الگوی پیشنهادی (werty) بررسی می کند. اگر آنها پیدا شوند، عبارت نادرست است، به این معنی که کاراکتر q "نادیده گرفته می شود"، یعنی با الگو مطابقت نخواهد داشت. اگر werty پیدا نشد، آن گزاره درست است و همه چیز با q خوب است. سپس به جستجوی هر کاراکتری غیر از فاصله ([^\s]*) ادامه می‌دهد.

    این گروه شامل الگوهای نمونه است. با کمک آنها می توانید ببینید که چگونه می توان از عبارات منظم در تمرین روزانه استفاده کرد. با این حال، توجه داشته باشید که آنها لزوماً در هیچ زبان برنامه نویسی کار نخواهند کرد، زیرا هر یک از آنها چنین هستند ویژگیهای فردیو سطوح مختلفپشتیبانی از عبارات منظم

    کمی سازها به شما امکان می دهند بخشی از یک الگو را تعریف کنید که باید چندین بار پشت سر هم تکرار شود. به عنوان مثال، اگر می خواهید بدانید که آیا یک سند دارای رشته ای از 10 تا 20 (شامل) حرف "a" است، می توانید از این الگو استفاده کنید:

    A (10،20)

    به طور پیش فرض، کمیت کننده ها حریص هستند. بنابراین، کمیت + به معنای "یک یا چند بار" با حداکثر مقدار ممکن مطابقت دارد. گاهی اوقات این باعث ایجاد مشکلاتی می‌شود، و سپس می‌توانید با استفاده از یک اصلاح‌کننده خاص به کمیت‌کننده بگویید که حریص نباشد ("تنبل" شود). به این کد نگاه کنید:

    ".*"

    این الگو با متن محصور شده در دو نقل قول مطابقت دارد. با این حال، خط اصلی شما ممکن است چیزی شبیه به این باشد:

    سلام دنیا

    الگوی بالا زیر رشته زیر را در این رشته پیدا می کند:

    "helloworld.htm" title="Hello World" !}

    او بیش از حد حریص بود و بزرگترین متنی را که می توانست ثبت کرد.

    ".*?"

    این الگو همچنین با هر نویسه ای که در گیومه های دوتایی قرار گرفته اند مطابقت دارد. اما نسخه تنبل (به اصلاح‌کننده توجه کنید؟) به دنبال کوچک‌ترین رخداد ممکن می‌گردد، و بنابراین هر زیررشته‌ای که دوبار نقل‌قول شده است را به‌صورت جداگانه پیدا می‌کند:

    "helloworld.htm" "سلام جهان"

    عبارات منظم از برخی کاراکترها برای نشان دادن قسمت های مختلف یک الگو استفاده می کنند. با این حال، اگر بخواهید یکی از این کاراکترها را در یک رشته به عنوان یک کاراکتر معمولی پیدا کنید، مشکلی وجود دارد. برای مثال، یک نقطه در یک عبارت منظم به معنای "هر کاراکتری به جز شکستن خط" است. اگر نیاز به یافتن نقطه در یک رشته دارید، نمی توانید فقط از " استفاده کنید. » به عنوان عام - این تقریباً همه چیز را پیدا می کند. بنابراین، باید به تجزیه کننده بگویید که این نقطه باید به عنوان یک نقطه معمولی در نظر گرفته شود و نه "هر کاراکتری". این کار با یک شخصیت فرار انجام می شود.

    یک کاراکتر فرار قبل از یک کاراکتر مانند یک نقطه باعث می شود که تجزیه کننده عملکرد آن را نادیده بگیرد و با آن به عنوان یک کاراکتر عادی رفتار کند. چندین کاراکتر وجود دارد که در اکثر قالب ها و زبان ها به چنین فراری نیاز دارند. می توانید آنها را در گوشه سمت راست پایین برگه تقلب ("Meta Symbols") پیدا کنید.

    الگوی یافتن نقطه این است:

    \.

    سایر کاراکترهای خاص در عبارات منظم با عناصر غیر معمول در متن مطابقت دارند. به عنوان مثال، خطوط شکسته و برگه ها را می توان از صفحه کلید تایپ کرد، اما احتمالاً زبان های برنامه نویسی را اشتباه می گیرد. کاراکتر فرار در اینجا استفاده می شود تا به تجزیه کننده بگوید که کاراکتر بعدی را به عنوان یک کاراکتر خاص و نه به عنوان یک حرف یا عدد معمولی در نظر بگیرد.

    جایگزینی رشته در قسمت بعدی «گروه ها و محدوده ها» به تفصیل توضیح داده شده است، اما وجود گروه های «غیرفعال» در اینجا باید ذکر شود. اینها گروه هایی هستند که هنگام جایگزینی نادیده گرفته می شوند، که اگر می خواهید از شرط "یا" در قالب استفاده کنید، اما نمی خواهید این گروه در جایگزینی شرکت کند بسیار مفید است.

    گروه ها و محدوده ها بسیار بسیار مفید هستند. احتمالاً شروع با محدوده ها آسان تر است. آنها به شما اجازه می دهند مجموعه ای از کاراکترهای مناسب را مشخص کنید. به عنوان مثال، برای بررسی اینکه آیا یک رشته دارای ارقام هگزادسیمال (0 تا 9 و A تا F) است، از محدوده زیر استفاده کنید:

    برای آزمایش مخالف، از یک محدوده منفی استفاده کنید، که در مورد ما با هر کاراکتری به جز اعداد از 0 تا 9 و حروف از A تا F مطابقت دارد:

    [^A-Fa-f0-9]

    گروه ها اغلب زمانی استفاده می شوند که یک شرط "یا" در یک الگو مورد نیاز باشد. زمانی که باید به بخشی از یک الگو از قسمت دیگری از آن مراجعه کنید. و همچنین هنگام جایگزینی رشته ها.

    استفاده از "یا" بسیار ساده است: الگوی زیر به دنبال "ab" یا "bc" است:

    اگر در عبارت منظم نیاز به مراجعه به هر یک از گروه های قبلی دارید، باید از \n استفاده کنید، جایی که به جای n، تعداد گروه مورد نظر را جایگزین کنید. ممکن است الگویی بخواهید که با حروف "aaa" یا "bbb" و سپس یک عدد و سپس همان سه حرف مطابقت داشته باشد. این الگو با استفاده از گروه ها اجرا می شود:

    (aaa|bbb)+\1

    بخش اول الگوی "aaa" یا "bbb" را جستجو می کند و حروف پیدا شده را در یک گروه ترکیب می کند. این با جستجوی یک یا چند رقم (+) و در نهایت \1 دنبال می شود. قسمت آخر قالب به گروه اول اشاره دارد و به دنبال همان است. به جای تطبیق با متنی که قبلاً توسط قسمت اول الگو پیدا شده است به دنبال تطابق است. بنابراین "aaa123bbb" با الگوی بالا مطابقت نخواهد داشت، زیرا \1 بعد از عدد به دنبال "aaa" می‌گردد.

    یکی از ابزارهای مفید در عبارات منظم، جایگزینی رشته است. هنگام جایگزینی متن، می توانید با استفاده از $n به گروه یافت شده مراجعه کنید. فرض کنید می خواهید تمام کلمات "آرزو" را در متن خود پررنگ کنید. برای انجام این کار، باید از تابع جایگزین عبارت منظم استفاده کنید که ممکن است به شکل زیر باشد:

    جایگزین (الگو، جایگزین، موضوع)

    پارامتر اول چیزی شبیه به این خواهد بود (شاید به چند کاراکتر اضافی برای این تابع خاص نیاز داشته باشید):

    ([^A-Za-z0-9])(آرزو)([^A-Za-z0-9])

    هر کلمه "آرزو" را به همراه کاراکترهای قبلی و بعدی پیدا می کند، مگر اینکه حروف یا عدد باشند. سپس جایگزینی شما می تواند به این صورت باشد:

    $1$2$3

    این جایگزین کل رشته ای است که توسط الگو پیدا شده است. ما جایگزینی را با اولین کاراکتر یافت شده (که یک حرف یا عدد نیست) شروع می کنیم و آن را با $1 علامت گذاری می کنیم. بدون آن، ما به سادگی این شخصیت را از متن حذف می کنیم. همین امر در مورد پایان تعویض (3 دلار) نیز صدق می کند. در وسط یک تگ HTML برای متن پررنگ اضافه کرده ایم (البته می توانید به جای آن از CSS یا استفاده کنید ، برجسته کردن گروه دوم که توسط الگو ($2) یافت می شود.

    اصلاح کننده های قالب در چندین زبان، به ویژه Perl استفاده می شود. آنها به شما اجازه می دهند نحوه عملکرد تجزیه کننده را تغییر دهید. به عنوان مثال، اصلاح کننده i باعث می شود که تجزیه کننده حروف کوچک و بزرگ را نادیده بگیرد.

    عبارات منظم در پرل با همان کاراکتر در ابتدا و در پایان قاب بندی می شوند. این می تواند هر کاراکتری باشد (معمولاً "/") و به شکل زیر است:

    /الگو/

    اصلاح کننده ها به انتهای این خط اضافه می شوند، مانند:

    /pattern/i

    در نهایت، قسمت آخر جدول حاوی متا کاراکترها است. اینها شخصیت هایی هستند که در عبارات منظم معنای خاصی دارند. بنابراین اگر می خواهید از یکی از آنها به عنوان یک کاراکتر معمولی استفاده کنید، باید از آن فرار کنید. برای بررسی وجود پرانتز در متن، از الگوی زیر استفاده می شود:

    واقعا لطف. مخصوصا برای شفاف سازی خوش اومدی :) خیلی ممنون. بسیار از شما متشکرم! ممنون.سریال باحال...اتفاقا من دارم این سریال رو از انگلیسی ترجمه میکنم (و با فرمت HTML انجام میدم) میتونید تو سایت من ببینید: sitemaker.x10.bz. همچنین یک برگه تقلب برای HTML وجود دارد که اینجا نیست. متشکرم. و در مورد حذف 10 کاراکتر اول هر کدام و سپس مقداری متن با کاراکتر وجود دارد و سپس از یک کاراکتر خاص لازم است همه چیز را تا انتها حذف کنید. !؟ 2 lails: در اینجا به عبارات منظم نیازی نیست. Substr() و strpos() در مورد PHP یا همتایان آنها در زبان های دیگر به شما کمک خواهند کرد. خواندن در مورد اظهارات جالب بود، من کم کم دارم متوجه می شوم. اینجوری واضح تر میشه: http://pcreonline.com/OazZNu/ سلام. لطفاً می‌توانید به من بگویید که چرا "عبارات به عقب نگاه کردن" برای من در فایرفاکس کار نمی‌کنند؟ کمک RegExp موزیلا اصلاً آنها را ندارد، آیا واقعاً در فاکس غیرممکن است؟ =((( صبح بخیر، ادعاهای نگاه مجدد توسط جاوا اسکریپت پشتیبانی نمی شوند، بنابراین احتمالاً در مرورگرهای دیگر نیز کار نخواهند کرد. موارد بیشتری وجود دارد اطلاعات دقیقدر مورد محدودیت های عبارات منظم در زبان جاوا اسکریپت. آفرین! بیا پنج متشکرم! به طور خلاصه و واضح! هوم با تشکر از شما با تشکر از شما! ممنون، خیلی کمک کرد، خیلی ممنون! بابت مقاله از شما متشکرم! به من بگویید، اگر لازم است ورود رمز عبور را به اعداد محدود کنید و بیش از 5 حرف وارد نکنید؟ سلام، برگه تقلب برای همه خوب است، اما می توان گورخر را روشن تر کرد، زیرا وقتی حروف سیاه را روی آن چاپ می کنید پس زمینه تیرهنه خیلی ممنون یک سوال کوچک، شما باید مقادیر بین start= و & را پیدا کنید، اما در عین حال این مرزهای محدوده را از خروجی حذف کنید. نحوه پیدا کردن محدوده انجام شد: start=.(1,)&
    اما هنوز دانش کافی در مورد چگونگی حذف مرزها وجود ندارد. برای کمک سپاسگزار خواهم بود. لطفاً به من بگویید چگونه یک عبارت منظم را برای بررسی تنظیم کنم (ممکن است مطابقت داشته باشد یا نباشد)؟ نحوه صحیح نوشتن یک عبارت منظم با علامت مساوی شروع می شود، هر متنی را در داخل پیدا می کند و در علامت & متوقف می شود
    این کاراکترها در جستجو گنجانده نمی شوند، با قسمت مورد نظر رشته شروع و پایان می یابند...

    من به چندین روش می نویسم، اما در نتیجه یا تمام متن باقی می ماند، اما علائم = و & ناپدید می شوند
    یا در انتهای خط & را رها کنید...
    من در مورد دلار خواندم که شخصیت آخر خط را حذف نمی کند

    مثال کوچک

    varreg = /[^=]*[^&]/g
    str.match(reg);

    منطقاً با علامت مساوی شروع می کنیم و به دنبال هر متنی می گردیم /[^=]*
    سپس روی علامت & [^&] می ایستیم بدون اینکه آن را در جستجو قرار دهیم و جستجو را طولانی تر تکرار می کنیم تا زمانی که آن را به طور کامل دور بزنیم /g

    کار نمی کند... رشته کامل را برمی گرداند

    عصر بخیر، به من بگویید چگونه یک عدد کمتر از 20 را پیدا کنم؟ با تشکر از بچه ها، با تشکر از مقاله! به من بگویید، اگر لازم است ورود رمز عبور را به اعداد محدود کنید و بیش از 5 حرف وارد نکنید؟

    دیما @ 24 آوریل 2015
    پاسخ:((?=.*\d)(?=.*)(?=.*).(8،15))--- در آخر به جای 8 فقط 5 قرار دهید

    سلام به همگی من تازه شروع کردم...
    میشه بگید چیکار میکنه:
    /^\w\w/a
    بسیار سپاسگزار خواهم بود) سلام، به من بگویید چگونه تمام اعداد این عبارت را از طریق یک برگه تقلب الهی 9 * 2 فهرست کنم! تمام سوالات حذف شد :-) (M1)
    (M2)
    (M3)
    (M4)
    (M5)

    به من بگویید چگونه یک عبارت بنویسم تا بفهمم در کجای متن آمده است

    آیا تا به حال خواسته اید regexp را یاد بگیرید؟ این راهنمای کوتاه به شما کمک می‌کند در 6 مرحله با آن‌ها برخورد کنید و مثال‌های فراوانی به شما کمک می‌کند تا مطالب را تجمیع کنید.

    regexp چیست؟

    Regexp گروهی از کاراکترها یا کاراکترها است که برای جستجوی یک الگوی متن خاص استفاده می شود.

    عبارت منظم الگویی است که با رشته موضوع از چپ به راست مطابقت دارد. عبارت "Regar expression" چندان زیاد استفاده نمی شود، معمولا "regex" و "regexp" به جای آن استفاده می شود. یک عبارت منظم برای جایگزینی متن در یک رشته، اعتبارسنجی یک فرم، استخراج یک رشته فرعی از یک رشته بر اساس تطابق الگو و غیره استفاده می شود.

    فرض کنید در حال ساختن یک اپلیکیشن هستید و می خواهید قوانینی را برای نحوه انتخاب نام کاربران تعریف کنید. به عنوان مثال، ما می خواهیم که شامل حروف، اعداد، زیرخط و خط فاصله باشد. همچنین می خواهیم تعداد کاراکترهای نام کاربری را محدود کنیم تا زشت به نظر نرسد. بنابراین از عبارت منظم زیر برای بررسی استفاده می کنیم:

    این عبارت رشته‌های john_doe، jo-hn_doe و john12_as را می‌پذیرد. با این حال، نام کاربری Jo با این عبارت مطابقت ندارد زیرا حاوی یک حرف بزرگ و همچنین بسیار کوتاه است.

    1. مسابقات اساسی

    یک عبارت منظم فقط الگویی از کاراکترها است که برای انجام جستجو در متن استفاده می کنیم. به عنوان مثال، عبارت منظم the به معنای حرف t به دنبال حرف h و به دنبال آن حرف e است.

    "the" => گربه چاق روی آن نشست راتشک

    عبارت منظم 123 با رشته 123 مطابقت دارد. عبارت منظم با رشته ورودی با مقایسه هر کاراکتر در regexp با هر کاراکتر در رشته ورودی مطابقت داده می شود. عبارت منظم و رشته ورودی کاراکتر به کاراکتر مقایسه می شوند. معمولا regex به حروف کوچک و بزرگ حساس است، بنابراین The با رشته مطابقت ندارد.

    "the" => اینگربه چاق روی تشک نشست.

    2. متا شخصیت ها

    متاکاراکترها بلوک های سازنده regexp هستند. آنها مستقل نیستند و معمولاً به نوعی تفسیر می شوند. برخی از متاکاراکترها معنای خاصی دارند و بنابراین در کروشه قرار می گیرند. متا شخصیت ها:

    متا شخصیت ها شرح
    . هر کاراکتری، به استثنای خط جدید.
    مجموعه ای از کاراکترهای محصور در پرانتز را جستجو کنید.
    [^ ] کلاس شخصیت منفی با هر کاراکتری که بین پرانتزها قرار ندارد مطابقت دارد
    * 0 یا بیشتر تکرار کاراکتر قبلی.
    + 1 یا بیشتر تکرار کاراکتر قبلی.
    ? کاراکتر قبلی را اختیاری می کند.
    (n,m) حداقل تکرارهای 'n' اما نه بیشتر از 'm' کاراکتر قبلی را برمی گرداند.
    (xyz) گروه یک شخصیت را به ترتیب معین پیدا می کند.
    | گزینه های معتبر را از هم جدا می کند.
    \ شخصیت بعدی را حذف می کند. به شما امکان می دهد کاراکترهای سرویس () ( ) را جستجو کنید. * +؟ ^ $ \ |
    ^ ابتدای رشته ورودی را پیدا می کند.
    $ انتهای رشته ورودی را پیدا می کند.

    2.1 نقطه

    . - این ساده ترین مثالفرا شخصیت متاکاراکتر. با هر شخصیت منطبق است. به عنوان مثال، عبارت منظم.ar به این معنی است: هر کاراکتری که با حرف a به دنبال آن حرف r قرار می گیرد.

    ".ar" => The همتراز ماشینكد در گارسن.

    2.2 فاصله نویسه ها

    یک بازه یا مجموعه کاراکتر را کلاس کاراکتر نیز می گویند. برای نشان دادن آن از براکت های مربع استفاده می شود. برای تعیین محدوده ای از کاراکترها در یک کلاس، باید از خط تیره استفاده شود. ترتیب تعدادی کاراکتر در یک مجموعه بی اهمیت است. بنابراین، برای مثال، عبارت منظم منظور او: T یا t به دنبال حرف h و به دنبال آن حرف e.

    "او" => اینماشین پارک شده در راگاراژ

    شایان ذکر است که نقطه ای که در پرانتز قرار می گیرد دقیقاً به معنای یک نقطه است و نه چیز دیگری. بنابراین عبارت منظم ar[.] به معنای کاراکتر کوچک a است که با حرف r و سپس یک نقطه همراه است. .

    "ar [.]" => گاراژ مکان مناسبی برای پارک یک ج است ar.

    2.2.1 نفی یک مجموعه شخصیت

    معمولاً کاراکتر ^ نشان‌دهنده شروع یک خط است، اما وقتی در داخل پرانتز قرار می‌گیرد، همه کاراکترهایی که بعد از آن قرار می‌گیرند از الگو حذف می‌شوند. برای مثال، عبارت [^c]ar با تمام کاراکترها به جز c و سپس a و r مطابقت دارد.

    "[^c]ar" => ماشین همترازكد در گارسن.

    2.3 تکرار

    متا کاراکترهای زیر + , * یا ? برای نشان دادن تعداد مجاز تکرار یک الگوی فرعی استفاده می شود. نقش آنها بستگی به مورد خاص دارد.

    2.3.1 ستاره

    این نماد به شما کمک می کند تا یک یا چند نسخه از هر نماد را پیدا کنید. عبارت منظم a* به معنای 0 یا بیشتر تکرار کاراکتر a است. اما اگر آن کاراکتر بعد از یک مجموعه کاراکتر یا کلاس ظاهر شود، آنگاه تکرارهای کل مجموعه پیدا خواهد شد. به عنوان مثال، عبارت * به معنای هر تعداد از این کاراکترها در یک رشته است.

    "*" => ماشین در گاراژ پارک شده است #21.

    یک کاراکتر همچنین می تواند در ارتباط با یک متاکاراکتر استفاده شود. برای انتخاب یک رشته از هر کاراکتر.* .

    یک ستاره همچنین می تواند با یک کاراکتر فاصله \s برای مطابقت با رشته ای از فاصله ها استفاده شود. به عنوان مثال، عبارت \s*cat\s به معنای 0 یا بیشتر فاصله به دنبال c و سپس a و t و 0 یا بیشتر فاصله است.

    "\s*cat\s*" => چربی گربهروی کانکس نشست گربهخلقت

    2.3.2 پلاس

    با یک یا چند تکرار از شخصیت قبلی مطابقت دارد. به عنوان مثال، عبارت منظم c.+t به این معنی است: یک حرف کوچک به دنبال حداقل یک کاراکتر و به دنبال آن یک حروف کوچک t. لازم به توضیح است که حرف t باید آخرین t جمله باشد.

    "c.+t" => چربی گربه روی تشک نشست.

    2.3.3. علامت سوال

    آیا متاکاراکتر در regexp وجود دارد؟ کاراکتر قبلی را اختیاری می کند. این نماد مربوط به غیبت کامل یا یک نمونه از نماد قبلی است. به عنوان مثال، عبارت منظم [T]?he به معنای: اختیاری است حرف بزرگ T به دنبال آن یک h کوچک و به دنبال آن یک حرف کوچک e.
    "[T]او" => اینماشین در گاراژ پارک شده است
    بیان تست

    "[T]او" => اینماشین در تی پارک شده است اوگاراژ

    2.4 پرانتز

    پرانتزها در regexp که به آنها کوانتیفایر نیز می گویند، برای تعیین چند بار تکرار یک کاراکتر یا گروهی از کاراکترها استفاده می شود. به عنوان مثال، عبارت منظم (2،3) به این معنی است که تعداد مجاز ارقام باید حداقل دو رقم باشد، اما بیش از 3 نباشد (نویسه هایی در محدوده 0 تا 9).

    "(2،3)" => عدد 9 بود. 999 7 اما ما آن را کامل کردیم 10 .0.

    می توانیم عدد دوم را حذف کنیم. به عنوان مثال، عبارت (2،) به معنای 2 یا چند رقم است. اگر کاما را هم حذف کنیم، عبارت (3) فقط 3 رقم، نه کمتر و نه بیشتر پیدا می کند.

    "(2،)" => عدد 9 بود. 9997 اما ما آن را گرد کردیم 10 .0.

    "(3)" => عدد 9 بود. 999 7 اما آن را به 10.0 گرد کرد.

    2.5 گروه شخصیت

    گروه کاراکتر گروهی از الگوهای فرعی است که در داخل پرانتز (...) نوشته می شود. همانطور که قبلا ذکر شد، اگر یک کمیت را بعد از یک کاراکتر در یک عبارت منظم قرار دهید، کاراکتر قبلی را تکرار می کند. اما اگر یک کمیت را بعد از یک گروه از کاراکترها قرار دهیم، فقط کل گروه را تکرار می کند. به عنوان مثال، عبارت منظم (ab)* با صفر یا چند مورد از کاراکتر "ab" مطابقت دارد. می توانیم از | نیز استفاده کنیم یک متاکاراکتر برای درهم آمیختن در یک گروه از شخصیت ها است. به عنوان مثال، عبارت منظم (c|g|p)ar به این معنی است: کاراکتر کوچک c , g یا p و به دنبال آن کاراکتر a و کاراکتر r .

    "(c|g|p)ar" => The ماشیناست همترازكد در گارسن.

    2.6 شمارش

    در regexp نوار عمودی| برای تعریف enum استفاده می شود. enum چیزی شبیه شرط بین چند عبارت است. شاید فکر کنید که یک مجموعه شخصیت و یک enum به یک شکل عمل می کنند، اما اصلاً اینطور نیست، تفاوت زیادی بین آنها وجود دارد. یک enum در سطح بیان کار می کند، در حالی که یک مجموعه کاراکتر در سطح کاراکتر کار می کند. به عنوان مثال، عبارت منظم (T|t)he|car به این معنی است: T یا t به دنبال یک کاراکتر کوچک h، به دنبال آن یک کاراکتر کوچک e یا یک کاراکتر کوچک c و به دنبال آن a و r.

    "(T|t)he|car" => خودروپارک شده است راگاراژ

    2.7 استثناء شخصیت خاص

    بک اسلش \ در regexp برای فرار از کاراکتری که آن را دنبال می کند استفاده می شود. این به ما امکان می دهد یک کاراکتر را به عنوان یک کاراکتر مطابق، از جمله رزرو شده ( ) / \ + * مشخص کنیم. $^ | ? . برای استفاده شخصیت خاصدر صورت لزوم، قبل از آن یک \ قرار دهید.

    به عنوان مثال، یک عبارت منظم. برای یافتن هر کاراکتری استفاده می شود. عبارت منظم (f|c|m)at\.؟ به معنای حروف کوچک f، c یا m به دنبال یک a به دنبال t و به دنبال آن یک کاراکتر اضافی است. .

    "(f|c|m)at\.؟" => گربه چاقنشست روی تشک.

    2.8 لنگر - پابند

    در regexp، از anchors استفاده می کنیم تا بررسی کنیم که آیا کاراکتر مربوطه اولین یا آخرین کاراکتر رشته ورودی است. لنگر دو نوع است: اولی ^ که بررسی می کند آیا کاراکتر مربوطه اولین کاراکتر وارد شده است یا خیر و دومی علامت دلار است که بررسی می کند آیا کاراکتر مربوطه آخرین کاراکتر رشته وارد شده است یا خیر.

    2.8.1. کارت

    کاراکتر ^ در regexp برای بررسی اینکه آیا کاراکتر مربوطه اولین کاراکتر در رشته ورودی است یا خیر استفاده می شود. اگر عبارت منظم ^a را برای رشته ورودی abc اعمال کنیم (بررسی اینکه a اولین کاراکتر است یا خیر)، آنگاه برابر با a خواهد بود. اما اگر عبارت منظم ^b را به همان رشته اعمال کنیم، چیزی برنمی‌گرداند، زیرا در رشته ورودی abc، کاراکتر b اولین کاراکتر نیست. بیایید به یک عبارت منظم دیگر ^(T|t)he نگاه کنیم، که به این معنی است: T یا t کاراکتر شروع رشته ورودی است، به دنبال آن کاراکتر کوچک h و سپس e .

    "(T|t)he" => اینماشین در پارک شده است راگاراژ

    "^(T|t)he" => اینماشین در گاراژ پارک شده است

    2.8.2 دلار

    علامت دلار برای بررسی اینکه آیا یک کاراکتر در یک عبارت آخرین کاراکتر در رشته وارد شده است یا خیر استفاده می شود. به عنوان مثال (at\.)$ به معنای یک حروف کوچک a است که به دنبال آن یک t و به دنبال آن a است. ، که باید خط را به پایان برساند.

    "(at\.)" => چربی ج درس دردر متر در

    "(at\.)$" => گربه چاق. نشست در متر در
    بیان تست

    3. مخفف نمادها

    Regexp به شما امکان می دهد از اختصارات برای برخی از مجموعه شخصیت ها استفاده کنید که کار با آنها را راحت تر می کند. بنابراین، در اینجا از اختصارات زیر استفاده می شود:

    4. بررسی موقعیت Lookaround

    Lookbehind و Lookahead (که به آن lookaround نیز می‌گویند) انواع خاصی از گروه‌های غیرقابل جذب هستند (آنها برای جستجو استفاده می‌شوند، اما خود بخشی از آن نیستند). از پیش بینی ها زمانی استفاده می شود که شرایطی داشته باشیم که این الگو قبل یا بعد از یک الگوی دیگر باشد. برای مثال، فرض کنید می‌خواهیم تمام اعدادی را که قبل از آنها $ نشان داده شده‌اند، از رشته ورودی $4.44 و $10.88 دریافت کنیم. ما از عبارت منظم (?<=\$)* , которое означает: получить все числа, содержащие. и которым предшествует символ $ . Ниже приведены lookarounds, что используются в регулярных выражениях:

    4.1 چشم انداز مثبت

    نگاه مثبت به این معنی است که این قسمت از عبارت باید از عبارت قبلی پیروی کند. مقدار بازگشتی حاوی متنی است که با قسمت اول عبارت مطابقت دارد. از پرانتز برای تعریف نگاه مثبت استفاده می شود. داخل آنها یک علامت سوال و یک علامت مساوی قرار دهید: (?=...) . خود عبارت بعد از = نوشته می شود. به عنوان مثال، عبارت (T|t)he(?=\sfat) یک T بزرگ یا کوچک به دنبال h و e است. در پرانتز، یک نگاه مثبت تعریف می‌کنیم که به موتور regex می‌گوید به دنبال The یا چربی دنبال شود.

    "(T|t)he(?=\sfat)" => اینگربه چاق روی تشک نشست.

    4.2 چشم انداز منفی

    پیش بینی منفی زمانی استفاده می شود که ما نیاز داریم همه موارد مطابق را در رشته ای به دست آوریم که از یک الگوی خاصی پیروی نمی کند. نگاه منفی مانند نگاه مثبت تعریف می شود، با این تفاوت که به جای علامت تساوی از علامت نفی استفاده می کنیم! . بنابراین، عبارت ما به شکل زیر می شود: (؟!...) . اکنون (T|t)he(?!\sfat) را در نظر بگیرید، که به معنای دریافت تمام The یا the در رشته ورودی است که پس از کلمه fat قبل از یک کاراکتر فاصله وجود ندارد.

    "(T|t)he(?!\sfat)" => گربه چاق نشست راتشک

    4.3 نگاه مثبت به پشت

    برای به دست آوردن همه موارد منطبق که قبل از یک الگوی خاص قرار دارند، از یک نگاه مثبت به عقب استفاده می شود. یک نگاه مثبت به این شکل نشان داده می شود: (؟<=...) . Например, регулярное выражение (?<=(T|t)he\s)(fat|mat) означает получить все fat или mat из строки ввода, которые идут после слова The или the .

    "(؟ چربیگربه روی آن نشست تشک.

    4.4 نگاه منفی

    از یک نگاه منفی برای به دست آوردن همه موارد منطبق که الگوی خاصی قبل از آنها وجود ندارد استفاده می شود. نگاه منفی به عقب با عبارت (?

    5. پرچم

    پرچم ها اغلب به عنوان اصلاح کننده نیز شناخته می شوند زیرا می توانند خروجی یک regexp را تغییر دهند. پرچم های زیر یکپارچه هستند و می توانند در هر ترتیب یا ترکیبی از regexp استفاده شوند.

    5.1 غیر حساس به حروف کوچک و بزرگ

    اصلاح کننده i برای جستجوی مواردی که به حروف بزرگ و کوچک حساس هستند استفاده می شود. به عنوان مثال، عبارت /The/gi به معنای یک T بزرگ به دنبال h و e است. و در انتهای عبارت i است که به لطف آن می توانید حروف بزرگ را نادیده بگیرید. g برای یافتن الگو در کل رشته ورودی استفاده می شود.
    "the" => اینگربه چاق روی تشک نشست.
    بیان تست

    "/the/gi" => اینگربه چاق روی آن نشست راتشک

    5.2 جستجوی جهانی

    اصلاح کننده برای انجام یک جستجوی الگوی سراسری استفاده می شود (جستجو پس از اولین مسابقه ادامه خواهد یافت). به عنوان مثال، عبارت منظم /.(at)/g با هر کاراکتری غیر از یک خط جدید و به دنبال آن یک کاراکتر کوچک a و سپس t مطابقت دارد. از آنجایی که ما از پرچم g در انتهای عبارت معمولی استفاده کردیم، اکنون تمام موارد منطبق را در خط ورودی پیدا می کند، نه فقط اولین مورد (که استاندارد است).

    "/.(at)/" => چربیگربه روی تشک نشست

    "/.(at)/g" => گربه چاق نشستبر روی تشک.

    5.3 جستجوی چند خطی

    برای انجام یک جستجوی چند خطی به اصلاحگر m نیاز است. همانطور که قبلا ذکر شد، لنگرها (^، $) برای بررسی اینکه آیا یک الگو ابتدا یا انتهای یک رشته است استفاده می شود. اما اگر می‌خواهیم bindingها روی هر خط کار کنند، باید از پرچم m استفاده کنیم. به عنوان مثال، عبارت منظم /at(.)?$/gm به این معنی است: یک حروف کوچک a به دنبال t و هر چیزی جز یک خط جدید. و به لطف پرچم m، این موتور عبارت منظم با الگوی انتهای هر خط از رشته مطابقت دارد.

    "/.at(.)؟$/" => چربی
    گربه نشست
    بر روی تشک.

    "/.at(.)?$/gm" => چربی
    گربه نشست