Langarlar: ^ va $, ko'p qatorli rejim
Langarlar (anchors) โ muntazam ifodada belgiga emas, balki pozitsiyaga mos keluvchi maxsus belgilardir. Ular hech qanday belgini "iste'mol qilmaydi", faqat satrning boshi, oxiri yoki so'z chegarasi kabi maxsus joylarni belgilaydi. Ushbu darsda ^, $ langarlarini, ko'p qatorli rejimni va so'z chegarasi \bni chuqur o'rganamiz.
Langar nima?
Oddiy belgi sinflari (\d, \w va h.k.) belgiga mos keladi. Langarlar esa pozitsiyaga mos keladi. Ular quyidagilar:
^(karet) โ matnning boshiga mos keladi;$(dollar) โ matnning oxiriga mos keladi.
Boshqacha aytganda, ^ "bu yerdan naqsh boshlanishi kerak", $ esa "bu yerda naqsh tugashi kerak" deganidir.
^ โ matnning boshi
Karet ^ naqsh matnning aynan boshidan boshlanishini talab qiladi:
$ โ matnning oxiri
Dollar $ naqsh matnning aynan oxiriga to'g'ri kelishini talab qiladi:
To'liq moslikni tekshirish: ^...$
^ va $ ni birga ishlatish juda kuchli usul โ u naqsh butun matnga to'liq mos kelishini tekshiradi, ya'ni matnning bir qismiga emas, balki hammasiga. Bu forma tekshiruvida (validatsiya) juda muhim:
^\d+$ naqshini so'z bilan o'qib ko'ring: "boshidan (^), bir yoki undan ko'p raqam (\d+), keyin darrov oxir ($)". Ya'ni matn faqat raqamlardan iborat bo'lishi shart. Bu forma tekshiruvining klassik naqshidir.m flagi โ ko'p qatorli rejim
Odatiy holda ^ va $ butun matnning boshi va oxiriga mos keladi, matn ichidagi qator uzilishlarini hisobga olmaydi. m (multiline) flagi bu xatti-harakatni o'zgartiradi: ^ va $ endi har bir qatorning boshi va oxiriga mos keladi.
Avval flagsiz holatni ko'ramiz โ faqat birinchi qator boshiga mos keladi:
Endi m flagi bilan โ har bir qator boshidagi raqamlar topiladi:
Xuddi shunday, $ ham m flagi bilan har bir qator oxiriga mos keladi:
m flagini s flagi bilan aralashtirib yubormang. m โ ^ va $ langarlarining har qatorga ta'sirini yoqadi. s โ nuqta . ning \n ga mos kelishini yoqadi. Ular butunlay boshqa vazifalarni bajaradi.\b โ so'z chegarasi
\b โ bu so'z chegarasi (word boundary) langari. U so'z belgisi (\w) va so'z belgisi bo'lmagan belgi (\W) orasidagi pozitsiyaga mos keladi. Boshqacha aytganda, u "so'zning boshi yoki oxiri" degan joyni belgilaydi.
So'z chegarasi uchta holatda mavjud bo'ladi:
- matn boshida, agar birinchi belgi so'z belgisi (
\w) bo'lsa; - matn oxirida, agar oxirgi belgi so'z belgisi bo'lsa;
- matn ichida, so'z belgisi va so'z bo'lmagan belgi tutashgan joyda.
\b ning eng foydali jihati โ u so'zning bir qismini emas, balki butun so'zni topishga imkon beradi. Masalan, Java so'zini JavaScript ichidan ajratamiz:
\b raqamlar bilan ham ishlaydi (chunki raqam ham \w ga kiradi), lekin u lotin bo'lmagan alifbolarda (kirill, o'zbek maxsus harflari) kutilganidek ishlamaydi, chunki \w ularni so'z belgisi deb hisoblamaydi.Amaliy misol: so'zni almashtirish
\b va langarlarni birga ishlatib, matndagi aynan kerakli so'zni xavfsiz almashtirish mumkin โ so'zning boshqa so'zlar ichiga kirib ketgan qismlariga tegmasdan:
Xulosa
- langarlar belgiga emas, pozitsiyaga mos keladi va hech qanday belgini iste'mol qilmaydi;
^โ matn (yokimflagida qator) boshi;$โ matn (yoki qator) oxiri;^...$birga โ naqsh butun matnga to'liq mos kelishini tekshiradi (validatsiya uchun ideal);m(multiline) flagi^va$ni har bir qatorning boshi/oxiriga mos qiladi;\bโ so'z chegarasi;\wva\Wtutashgan joyga mos keladi va butun so'zni topishga yordam beradi;\blotin harflari va raqamlar bilan ishlaydi, lekin lotin bo'lmagan alifbolarda ishonchli emas.