Regexp
Kas yra Regular Expressions, dar kitaip sutrumpintai vadinamas Regexp ?
Regular expressions yra simbolių rinkinys leidžiantis gramatiškai aprašyti arba redaguoti tekstą. Šiuo metodu galima labai paprastai redaguoti tekstus, šiuo atveju sutaupomas laikas ir kodas.
pats paprasčiausias pavyzdys
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 ^ ir $ Š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ė: [ ][keisti]
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)[keisti]
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 apibrėž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 galime parašyti paterną:
kompas|kompiuteris
Arba tą patį parašyti
komp(as|iuteris)
Šie paternai yra ekvivalentūs. Atkreipkite dėmesi jog paterne norėdami išskirti kelis simbolių variantus 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 bet kiek 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 paterno dalis gali kartotis. Sakykim "go(2,10)gle" paternui tiks “google” ir "gooooogle", tačiau "gogle" jau nebetiks. Jeigu intervalą parašome po skliaustų, tai jis galios tuose skliaustuose esančiai grupei, o po simbolių klasė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 [[paternas|paternus]. Pavyzdys: "([Yy]ahoo|([Gg]oo+gle))" tiks eilutėms
"Yahoo", "goooogle", "google".
Escape "/"[keisti]
Escape leidžia paternuose apibrėžti rezervuotus simbolius, sakykim paternas "goo+gle\.com” leis apibrėžti "google.com"
Keletas pavyzdžių[keisti]
Audi automobilių apibrėžimas "[Aa]udi ((10|9|8)0|A[1-8])", rezultatas: Audi 100 audi 100 Audi 90 audi 90 Audi 80 audi 80 Audi A1 audi A1 Audi A2 audi A2 Audi A3 audi A3 Audi A4 audi A4 Audi A5 audi A5 Audi A6 audi A6 Audi A7 audi A7 Audi A8 audi A8
Dar keletas pavyzdžių:
Paprastas adreso atpažinimas "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]+)+" Dvejetainių skaičių 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]+"