Regexp

Iš Žinynas.
19:01, 26 vasario 2016 versija, sukurta \dev\null (Aptarimas | indėlis)
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Jump to navigation Jump to search

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]+"