Regular expressions (1 dalis)
Kas yra regular expressions?
Regular expressions yra simbolių rinkinys leidžiantis gramatiškai aprašyti arba redaguoti tekstą (tikiuosi gerai išsireiškiau :))
Nekalbėsiu apie tai iš kur atsirado, kam konkrečiai naudoti, tik paminėsiu jog su šituo dalykų galima labai paprastai redaguoti tekstus, taigi sutaupysime laiko ir kodo.
Mažiau kalbų, daugiau darbų, lets start
pats parasčiausiais pavizdys
eiti
Taigi visoje eilutėje šis paternas ras visus “eiti”. Tarkim turim eilutę: “Ryte mes turime eiti į mokyklą”, tai pagal šį paterną atitinką tik “eiti”. O jei turime “Eiti iš proto”, tada šis paternas netinka niekur, kadangi paternuose yra skiriamos didžiosios ir mažosios raidės.
Eiluės simboliai ^ ur $
Šitie simboliai apibrėžia teksto pradžią ir pabaigą. Simbolis ^ pradžia, o simbolis $ pabaigą. Jie naudojami norint padaryti tam tikrą pabaigą ir/ar pradžią. Tarkim turime paterną
eiti
taigi, jei ieškosime pagal šį paterną žodyje “įeiti” rasime reiškmę eiti. Tačiau jeigu mes nenorime leisti dėti priešdėlių šiame žodyje, tai mums reikia naudoti:
^eiti
Taigi dabar žodyje “įeiti” nerasmine nieko kas tenkins šį paterną. Panašiai ir su $, tik jis naudojamas aptikti eilutės pabaigą.
Simbolių klasė: []
Simbolių klasė leidžia nurodyti kelis galimus simbolius. Sakymim paternas:
eisi[mt]e
atitiks ir eisime ir eisite. Kaip matome galimus simbolius reikia surašyti be tarpų ir kitokių skiriamųjų ženklų tarp [ ir ]. Tačiau sakykim mes norime iš teksto paimti tik vienaženklį skaičių. taigime galime pasirašyti “[1234567890]” paterną.
ženklas ^ nurodo kokie simboliai negalimi paterne. Tad paternas “[^ąčęėįšųūĄČĘĖĮŠŲŪ]” netiks lietuviškom raidėm
“-” (brūkšnys ir “.” (taškas)
Simbolių intervalus galime parašyti tarp “-” (brūkšnio). Taigi paternas “[0-9a-fA-F]” leis apibrėžti visus šešioliktainius skaičius. (be brūkšnio tektų rašyti [0123456789abcdefABCDEF])
Jeigu norime į galimų simbolių skaičių įtraukti “-” tada mes jį turime rašyti klasės pabaigoje arba pradžioje “[-0-9]”
Taškas leidžia apibėžti bet kokį ženklą. Paternas “.r” tik ir žodžiui “ir” ir “ar”, bei “Ir”, “Ar”, “or”, “mr”
Kelių galimų variantų simbolis “|” (stačias brūkšnys)
Šio simbolio pagalba galime nurodyti kelis teksto dalies variantus. Sakykim norint apibrėžti “kompas” ir “kompiuteris” mes galima parašyti paterną:
kompas|kompiuteris
Arba tą patį parašyti
komp(as|iuteris)
Šie paternai yra akvivalentūs. Atkreipkite dėmesi jog paterne norėdami išskirti kelis simbolių variantūs juos rašėme skliausteliuose
“?”, “+”, “*”
Šitie simboliai leidžia nurodyti kiek kartų turi kartotis prieš juos esanti paterno dalis.
“?” reiškia turi būti ta dalis ar ne (0 arba 1).
“+” reiškia kad šita dalis turi būti mažiausiai vieną kartą, tačiau ji gali kartotis (1 - begalybė)
“*” reiškia šita dalis gali būti, gali nebūti ir gali kartotis belekiek kartų (0 - begalybė)
Sakykim paternas:
valio+
leis apibrėžti ir valio, ir valioooooooo ir valioooooooooooooooooo. Taip pat ir “goo+gle” leis apibrėžti ir google, ir gooooogle ir goooooooooooogle.
taip pat šiuos simbolius galime naudoti klasėms arba grupėms. Sakykim “A[šru]+” nurodo ir Aš, ir Ašššššš, ir Auuuuuuuu, beje šitam paternui tiks ir “Aršuš”. O “(go )+” jau nurodo ir “go ” ir “go go go go “. Norėdami panaikinti tarpelį gale galima parašyti tokį paterna: “go( go)*”
Intervalai “{” ir “}” ({min,max})
Intervalų pagalba galime nurodyti kiek tam tikra peterno dalis gali kartotis. Sakykim “go(2,10)gle” paternui tiks “google” ir “gooooogle”, tačiau “gogle” jau nebetiks. Jeigu intervalą parašome po sklaiustų, tai jis galios tuose sklaiustuose esančiai grupei, o po simbolių klaisės tai simbolių klasei.
Paterno grupės tarp “(” ir “)”
Skliausteliais galime apgaubti grupe. Taip pat galima grupę dėti į kitą grupę. Tokiu būtų galime parašyti sudėtingus paternus. Pavizdys: “([Yy]ahoo|([Gg]oo+gle))” tiks eilutėms “Yahoo”, “goooogle”, “google”.
Escape “/”
Escape leidžia paternuose apibrėžti rezervuotus simbilius, sakykim paternas “goo+gle\.com” leis apibrėžti “google.com”
Keletas pavizdžių
Audi automobilių apibėžimas “[Aa]udi ((10|9|8)0|A[1-8])”
Paprastas adreso atpazinimas “http(s)?:\/\/[-0-9a-zA-Z]+(\.[-0-9a-zA-Z]+)*”
Pašto atpažinimas “[-0-9a-zA-Z]+(\.[-0-9a-zA-Z]+)*@[-0-9a-zA-Z]+(\.[-0-9a-zA-Z]+)+”
Dvjetainių skaičų atpažinimas “[01]+”
Dešimtainių skaičių atpažinimas “[0-9]+”
Šešioliktainių skaičių atpažinimas “[0-9a-fA-F]+”
Norėdami aptikti ir neigiamus skaičius “[-]?[0-9]+”
Pasitreniruote galite http://neworldwar.com/preg.php


Palikti komentarą