Apie Regex (Regular expression)

Sveiki.

Aprasysiu sokia tokia pamoka apie Regex, arba kitaip “Regular Expression”.
Regex yra skirtas paieskoms daryti ir tai nera jum iprastinis ieskojimas. Su regex galima ieskoti kintamu zodziu, sudetingus sakinius ir panasiai – suprasit paskaite toliau.

Is pradziu gali pasirodyti sudetinga, taciau ji ismokus palengveja gyvenimas, ypac programuojant ir tikrai nera taip sunku kaip atrodo, ir kad visa tai ismokti, pasiimkit koki nors tekstiny dokumenta ir zaiskit.
Kas zaidzia so Notepad++ tai greiciausiai matet toky pasirinkima:

1

Taciau notepad++ nepalaiko kai kuriu uzklausu, ir jo ieskojimo galimybes pagal Regex yra kiek ribotos, nes naudojamas kitoks variklis, mat Regex varikliu yra prikurta ne vienas. Kad daugiausiai isnaudoti Regex patarciau imti “NoteTab”, kuris taipogi yra nemokamas, taciau tik Lite versija, bet to pilnai uztenka: http://www.fookes.com/ftp/free/NoteTab_Setup.exe

Pradesim nuo to, kad aprasysiu visus trimpinius ir Specialius simbolius kurie yra naudojami, o specialiu simboliu yra isviso 14 ir keli trumpiniai.

Simboliai:
[] – apibrezia simboliu klases, Pvz: [a-zA-Z0-9]
\ – “isejimo” simbolis, Pvz: \[
^ – pabrezia kad ieskomas zodis turi buti pirmas eiluteje arba nurodo kokiu simboliu vengti, Pvz: ^[a-zA-Z0-9] ; [^a-zA-Z0-9]
$ – pabrezia kad po ieskomo zodzio neturi buti daugiau nieko, Pvz: [a-zA-Z0-9]$
. – nurodo kad vietoje tasko gali buti bet koks simbolis arba jokio, Pvz: [a-zA-Z.]
| – pasirinkimo simbolis, Pvz: (a|b)
? – nurodo kad tai kas apibrezta gali buti kaip papildymas, Pvz: (eso)?
* – nurodo kad tokiu simboliu gali buti daugiau, Pvz: [a-zA-Z0-9]*
+ – pabrezia kad paieskoje nebutu tusciu rezultatu, Pvz: [a-zA-Z0-9]+
() – apibrezia pasinkimus, Pvz: (a|b)
{} – nurodo kiek paieskoje gali buti simboliu, Pvz: {4,}

Trumpiniai:
\d – skaiciu klasiai apibudinti, tai tas pats kaip rasyti [0-9]
\s – tarpo simbolis, dar kitaip “whitespace”
\w – simboliu klasiai apibudinti, tai tas pats kaip rasyti [a-zA-Z0-9]

Na, o dabar apie kiekviena is ju atskirai:

Pirmas ir Antras – []
Lauztiniai skliaustai skirti apibrezti simboliu klasiai ir ta klase be papildomai kitu specialiu simboliu bus taikoma tik vienam simboliui zodyje.
Tarkim turim tokia klase: [a-zA-Z0-9]
Klase dar gali buti ir koks tai derinys, kaip kad: [abcd123]
ir Regex varikliukas viena po vieno ieskos dokumente.
Tai reiskia kad ieskoma bus simbolio is visos abeceles ir is skaitmenu nuo 0 iki 9.
[a-zA-Z] ieskos tik raides; [a-z0-9] ieskos tik mazasias raides ir skaicius ir t.t. Ko variklis ieskos priklausys nuo jusu junginiu.

Trecias – \
Backslash’as skirtas naudojimuj kai reikia “pabegti” (escape’inti) nuo sekancio specialaus simbolio, tai reiskia kad sekantis specialus simbolis po \ bus itrauktas i paieskos rezultatus.
Tarkim norim surasti visus skaicius tarp lauztiniu skliaustu ir pasirinkti kartu ir skliaustais: [5]
Tokiu atveju naudosim tokia uzklausa: \[[0-9]\]

Ketvirtas – ^
Simbolis kaip rodykle i virsu vadinamas “caret”. Jis naudojamas kai norima pabrezti kad paieskos rezultatas turi buti pirmas zodis/derinys eiluteje.
Tarkim turim dokumenta kuriame yra surasyta skaiciai zymintys lapus, mums reikia istraukti tik tuos skaicius kurie zymi lapo numery, o ne ta kuris gali buti tekste, todel naudosim tokia uzklausa: ^[0-9]
Skaiciai esantys zodyje arba patraukti bent per viena tarpa nuo eilutes pradzios jau nebus itraukti i rezultatus.
Caret’as dar gali buti naudojamas kai norima kad i rezultatus nebutu itraukta tai ka apibresime.

Penktas – $
Tai dolerio zenklas ir jis naudojamas kai norima pabrezti kad surastas rezultatas turi buti paskutinis zodis/derinys eiluteje.
Tarkim turim dokumenta kuriame yra surasyta skaiciai zymintys lapus, mums reikia istraukti tik tuos skaicius kurie zymi lapo numery, o ne ta kuris gali buti tekste, todel naudosim tokia uzklausa: [0-9]$
Tokiu atveju bus rasti rezultatai kuriuose pries numery yra tarpu ar kitu simboliu, taciau su salyga kad tas simbolis bus paskutinis eiluteje.

Sestas – .
Paprasciausias taskas nurodo kad toje vietoje gali buti iterptas bet koks imbolis, arba jokio.
Kaip ir anksciau, tarkim turim dokumenta kuriame reikia surasti visus skaicius kurie zymi lapus taciau po to numerio eina mums nezinomas simbolis, todel naudosim tokia uzklausa: [0-9].
Desim taska pries klase jai norim ieskoti simbolio pries numery.

Septintas – |
Stacias slash’as arba lietuviskai – Vamzdis. Jis naudojamas kai norima kad is keliu variantu butu pritaikytas vienas arba visi.
Dokumente norint surasti zodzius “kate”, “eso” ir “kulverstukas” bus naudojama tokia uzklausa: (kate|eso|kulverstukas)
zodziai gali buti nebutinai eiles tvarka, ieskos vienodai. Tokiu budu viena paieska yra surandama visi mums reikalingi zodziai, o paprastai ieskant reiktu atlikti tris kartus paieska.

Astuntas – ?
Paprastas klaustukas kuris apibrezia kad tai kas bus pries ji bus kaip papildomas pasirinkimas.
Norint surasti visus lauztinius skliaustus su nebutinai jame esanciu skaiciumi naudojama tokia uzklausa: \[[0-9]?\]
Tai reiskia kad butinai bus ieskoma lauztiniu skliaustu ir skaicius jaigu bus tarp ju gali buti rezultate.

Devintas – *
Zvaigzdute nurodo kad simbolis/zodis/derinys arba simboliu klase gali kartotis.
Vat mums is dokumento reikia istraukti zodzius esancius tarp lauztiniu skliaustu kartu su jais, tam rasysim taip: \[[a-zA-Z]*\]
Reiktu atsiminti kad specialus simboliai, ju ne’escape’inant negali buti rasomi i klase, todel multiplikatorius rasomas iskarto po klases uzdarymo.

Desimtas – +
Pliusiukas nurodo kad paieskoje negali buti tusciu vietu. Ieskant su simboliu klasemis, kaip kad [a-z] ar [A-Z] ar [0-9] regex variklis pagal nutylejima visada galvoja kad gali rasti tai kas apibrezta arba naudoti tuscia vieta (whitespace’a), todel del tokios klaidos rezultatuose galima aptikti tusciu eiluciu. Kad to isvengti yra naudojamas pliusas.

Vienuoliktas ir Dvyliktas – ()
Iprasti skliaustai apibrezia zodzius/simboliu deriny kuris bus naudojamas jungtyje su klaustuku.

Tryliktas ir Keturioliktas – {}
Tokie keisti skliaustai naudojami kai norima apibrezti kiek tures buti simboliu musu ieskomame zodyje.
Rasoma {5} kai zodyje turi buti nedaugiau ir nemaziau 5 simboliu;
Rasoma {5,} kai zodyje turi buti nemaziau 5 simboliu, gali buti ir daugiau;
Rasoma {5,10} kai zodyje gali buti nemaziau 5 simboliu, bet ir nedaugiau 10. Antras skaicius negali buti mazesnis uz pirmaji;
Paprastai norint surasti 3 ar daugiau “a” raidziu is eiles yra rasoma: a{3,}
ir pan. atitinkamai.

Tai tiek trumpai apie spec. Simbolius :) dabar siek tiek apie trumpinius.

Trumpiniai rasomi su backslash’u priekyje: \w, \s, \d, ir kiekvienas atlieka savo funkcija.
\w – nuo zodzio “word”. Jis atitinka simboliu klase [a-zA-Z0-9]
\s – nuo zodzio “space”. Jis atitinka tarpa (whitespace)
\d – nuo zodzio “decimal”. Jis atitinka skaiciu klase [0-9]

Dabar kad jau ismokot galit palengvinti savo gyvenima darydami tokius crazy junginius kaip kad: (\d{1,2}\s)?[a-zA-Z]+\s\d{4}$
arba: ^([0-9]{1,}(\.)?(\s)?)?((\.)?[0-9]{1,}(\.)?(\s)?)?[A-Z]+(\s[A-Z]+)*?$
Spekit kam jie naudojami :D

Paziurekit i sita svetaine del daugiau pamoku :)
http://www.regular-expressions.info/tutorialcnt.html

Subscribe
Notify of
guest

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments