Regex qo'llanmasi - misollar bo'yicha tezkor cheatheet

YANGILIK! Mening yangi REGEX COOKBOOK -ingizni eng ko'p ishlatiladigan (va eng ko'p qidiriladigan) regeks -ni ko'rib chiqing

Doimiy iboralar (regex yoki regexp) har qanday matndan ma'lum bir qidirish naqshining bir yoki bir nechta mosligini qidirish orqali ma'lumot olishda (masalan, ASCII yoki unicode belgilarining ma'lum bir ketma-ketligi) juda foydali.

Qo'llash sohalari tekshiruvdan boshlab satrlarni tahlil qilish / almashtirish, ma'lumotlarni boshqa formatlarga o'tkazish va veb-qirqishlardan iborat.

Eng qiziqarli xususiyatlardan biri shundaki, sintaksisni o'rganganingizdan so'ng siz ushbu vositadan deyarli barcha dasturlash tillarida (JavaScript, Java, VB, C #, C / C ++, Python, Perl, Ruby) foydalanishingiz mumkin. , Delphi, R, Tcl va boshqalar) dvigatellar tomonidan qo'llab-quvvatlanadigan eng zamonaviy xususiyatlar va sintaksis versiyalarini qo'llab-quvvatlash haqida kichik farqlar bilan).

Keling, ba'zi misollar va tushuntirishlarni ko'rib chiqaylik.

Asosiy mavzular

Langarlar - ^ va $

^ - - bilan boshlanadigan har qanday satrga mos keladi.
end $ oxiri bilan tugaydigan qatorga mos keladi
$ Aniq satrning oxiri (mos keladi va oxiri bilan tugaydi)
qichqiriq matn ichidagi har qanday satrga mos keladi

Quantifiers - * +? va {}

abc * n dan yoki undan ko'p bo'lgan satrga mos keladi c -> harakat qilib ko'ring!
abc + b yoki undan ko'p c qiymatlar satriga mos keladi
abc? n va n gacha bo'lgan satrga to'g'ri keladi
abc {2} harfi 2 c dan iborat qatorga to'g'ri keladi
abc {2,} satr 2 va undan ko'p c qiymatlar bilan mos keladi
abc {2,5} raqami 2 dan 5 s gacha bo'lgan qatorga to'g'ri keladi
a (bc) * satr bc qatorining nol yoki undan ko'p nusxasidan iborat bo'lgan satrga mos keladi
a (bc) {2,5} satr mos keladi, undan keyin bc ketma-ketligining 2 tadan 5 tagacha nusxasi bo'ladi

YOKI operator - | yoki []

a (b | c) satr b va c raqamlari bilan mos keladi -> harakat qilib ko'ring!
a [bc] avvalgidek

Belgilar sinflari - \ d \ w \ s va.

\ d raqamdan iborat bitta belgi bilan mos keladi -> harakat qilib ko'ring!
\ w so'z belgilariga mos keladi (harf-raqam belgisi va pastki chiziq) -> harakat qilib ko'ring!
\ s bo'sh joy belgilariga mos keladi (tablar va chiziqlar orasidagi uzilishlarni o'z ichiga oladi)
. har qanday belgi bilan mos keladi -> harakat qilib ko'ring!

Dan foydalaning. operator sinchkovlik bilan ishlaydi, chunki ko'pincha klass yoki rad etilgan belgilar klassi (biz keyingi o'rinlarda muhokama qilamiz) tezroq va aniqroq bo'ladi.

\ d, \ w va \ s shuningdek, o'z e'tirozlarini \ D, \ W va \ S-lar bilan mos ravishda taqdim etadilar.

Masalan, \ d bilan olingan natijaga qarshi teskari o'yin ko'rsatiladi.

\ D bitta raqamli bo'lmagan belgi bilan mos keladi -> harakat qilib ko'ring!

So'zma-so'z olish uchun siz ^. [$ () | * +? {{Belgilaridan qochishingiz kerak, chunki ular maxsus ma'noga ega.

$ $ \ d bitta raqamdan oldin $ bo'lgan qatorga mos keladi -> Sinab ko'ring!

Yorliqlar \ t, yangi qatorlar \ n, avtoulovni qaytarish \ r kabi bosib chiqarish mumkin bo'lmagan belgilar bilan ham moslashishingiz mumkin.

Bayroqlar

Rejimni qanday tuzishni o'rganmoqdamiz, lekin asosiy tushunchani unutgan holda: bayroqlar.

Odatda regex ushbu shakl / abc / ichiga kiradi, bu erda qidirish chizig'i ikkita teskari belgi bilan ajratilgan /. Oxirida biz ushbu qiymatlarga ega bayroqni belgilashimiz mumkin (biz ularni bir-birimizga birlashtira olamiz):

  • g (global) birinchi o'yindan keyin qaytmaydi, oldingi o'yin oxiridan keyingi izlanishlarni qayta boshlaydi
  • m (ko'p qatorli) yoqilganda ^ va $ butun satr o'rniga satrning boshiga va oxiriga to'g'ri keladi
  • i (befarq) butun iborani katta-kichikligini sezgir qilmaydi (masalan / aBc / i AbC-ga mos keladi)

Oraliq mavzular

Guruhlash va yozib olish - ()

a (bc) Qavslar bc qiymati bilan ta'qib qiluvchi guruhni yaratadilar -> harakat qilib ko'ring!
a (?: bc) * yordamida?: biz suratga olish guruhini o'chirib qo'yamiz -> harakat qilib ko'ring!
a (?  bc) yordamida?  biz guruhga nom qo'yamiz -> Buni sinab ko'ring!

Sizning xohlagan dasturlash tilingizdan foydalanib, satrlardan yoki ma'lumotlardan ma'lumotlarni olishimiz kerak bo'lganda, ushbu operator juda foydali. Bir nechta guruh tomonidan olingan har qanday bir nechta hodisalar klassik massiv ko'rinishida fosh qilinadi: biz match natijalari bo'yicha indeksdan foydalangan holda ularning qiymatlariga kiramiz.

Agar biz guruhlarga nom qo'yishni tanlasak ((? ...) ni ishlatib, guruh natijalarini lug'at kabi natijalar yordamida guruhlarning nomlarini olishimiz mumkin.

Qavsli iboralar - []

[abc] a yoki b, yoki c ga teng bo'lgan satrga mos keladi -> a | b | c -> sinab ko'ring!
[a-c] oldingi kabi
[a-fA-F0-9] bitta o'n oltilik sonni bildiruvchi satr, kichik harflarga ahamiyatsiz -> harakat qilib ko'ring!
[0-9]%% belgisi oldida 0 dan 9 gacha bo'lgan belgilar
[^ a-zA-Z] satr a dan z gacha yoki A dan Z gacha harfga ega emas. Bu holda ^ iborani rad qilish sifatida ishlatiladi -> Buni sinab ko'ring!

Esda tutingki, qavsli iboralar ichidagi barcha maxsus belgilar (teskari chiziq bilan birga) o'zlarining maxsus kuchlarini yo'qotadilar: shuning uchun biz "qochish qoidalari" ni ishlatmaymiz.

Ochko'zlik va yolg'on o'yin

Hisoblagichlar (* + {}) ochko'z operatorlar, shuning uchun ular mos keladigan matnni taqdim etilgan matn orqali imkon qadar kengaytirishadi.

Masalan, <. +> Bu

oddiy div
testiga mos keladi. Faqat div yorlig'ini olish uchun biz foydalanishimiz mumkin? uni dangasa qilish:

<. +?> har qanday belgilarga bir yoki bir necha marta kiritilgan  ichiga mos keladi, kerak bo'lganda kengayadi -> harakat qilib ko'ring!

E'tibor bering, yaxshiroq echim ishlatishdan saqlanish kerak. yanada qat'iy rejim foydasiga:

<[^ <>] +>  ichiga bir yoki undan ko'p marta kiritilgan  -> tashqari har qanday belgi bilan mos keladi.

Murakkab mavzular

Chegaralar - \ b va \ B

\ babc \ b "faqat so'zlarni" qidirishni amalga oshiradi -> harakat qilib ko'ring!

\ b karetaga o'xshash langarni (u $ va ^ ga o'xshash) bir-biriga mos keladigan pozitsiyalarni bildiradi, bu erda bir tomon so'z belgisi (\ w kabi), boshqa tomoni so'z belgisi emas (masalan, bu satrning boshlanishi bo'lishi mumkin). yoki bo'sh joy belgisi).

Bu uning rad qilinishi bilan birga keladi, \ B. Bu \ b mos kelmaydigan barcha pozitsiyalarga mos keladi va agar biz so'z belgilari bilan o'ralgan qidiruv usulini topishni istasak.

\ Babc \ B agar naqsh so'z belgilarida to'liq o'rab olingan bo'lsa, mos keladi -> harakat qilib ko'ring!

Orqaga havolalar - \ 1

([abc]) \ 1 \ 1 yordamida birinchi yozuv guruhi tomonidan topilgan bir xil matnga mos keladi -> Sinab ko'ring!
([abc]) ([de]) \ 2 \ 1 biz ikkinchi (uchinchi, to'rtinchi va boshqalar) yozib olgan guruh tomonidan bir xil matnni aniqlash uchun \ 2 (\ 3, \ 4, va hokazo) dan foydalanishimiz mumkin. -> harakat qilib ko'ring!
(?  [abc]) \ k  biz guruhga foo ismini qo'yamiz va keyinroq unga murojaat qilamiz (\ k ). Natijada birinchi regex bilan bir xil -> harakat qilib ko'ring!

Oldinga va orqaga qarash - (? =) Va (? <= =)

d (? = r) d ga mos keladi, agar r dan keyin bo'lsa, lekin r umumiy regex matchiga kirmaydi -> Buni sinab ko'ring!
(? <= r) d faqat d dan oldin r ga mos keladigan bo'lsa, lekin r umumiy regex matchiga kirmaydi -> Buni sinab ko'ring!

Siz shuningdek rad etish operatoridan foydalanishingiz mumkin!

d (?! r) d ga mos keladi, agar r ga rioya qilinmasa, lekin r umumiy regex matchiga kirmaydi -> Buni sinab ko'ring!
(?  Buni sinab ko'ring!

Xulosa

Ko'rganingizdek, regexning qo'llaniladigan sohalari bir nechta bo'lishi mumkin va aminmanki, siz ishlab chiqaruvchilarning kareralarida ko'rilganlar orasida kamida bittasini topdingiz, bu erda tezkor ro'yxat:

  • ma'lumotlarning to'g'riligini tekshirish (masalan, vaqt chizig'i yaxshi shakllanganligini tekshirish)
  • ma'lumotlarni qirqish (ayniqsa veb-varaqlash, ma'lum so'zlar to'plamini o'z ichiga olgan barcha sahifalarni oxir-oqibat ma'lum tartibda topish).
  • ma'lumotlar almashinuvi (ma'lumotlarni "xom" dan boshqa formatga o'zgartirish)
  • satrlarni tahlil qilish (masalan, GET-ning barcha parametrlarini aniqlash, qavs ichida to'plam ichiga matnni kiritish)
  • satrlarni almashtirish (masalan, hatto JSON ob'ektida Java yoki C # sinfini tarjima qilish uchun umumiy IDE-dan foydalangan holda kod seansi paytida - ";" ni "," bilan kichik harfga aylantiring, deklaratsiyani oldini oling va hokazo)
  • sintaksisni ajratib ko'rsatish, fayl nomini o'zgartirish, paketlarni siqish va satrlarni o'z ichiga olgan ko'plab boshqa dasturlar (ma'lumotlar matnli bo'lmasligi kerak)

Xursand bo'ling va maqolani sizga yoqqan bo'lsa tavsiya qilishni unutmang

YANGILIK! Mening yangi REGEX COOKBOOK -ingizni eng ko'p ishlatiladigan (va eng ko'p qidiriladigan) regeks -ni ko'rib chiqing