Regular Expressions Basics
tvorba POSIX-ových regulárnych výrazov, práca s nástrojom
grep
Video pre cvičenie
Objectives
- Naučiť sa vytvárať regulárne výrazy pre rozpoznávanie rozličných textov.
- Naučenie sa základov práce s nástrojom
grep
.
About
Znalosť regulárnych výrazov patrí k veľmi užitočným zručnostiam
každého programátora. Počas tohto cvičenia si ich znalosť lepšie
osvojíte. Budete pracovať v príkazovom riadku s nástrojom
grep
(a egrep
).
Postup
Regular Expressions Basics
V prvom kroku začneme s jednoduchými regulárnymi výrazmi. Teda s ich tvorbou, aby ste si osvojili syntax zápisu a prácu s nástrojmi na ich overovanie.
Úloha
Vytvorte regulárny výraz pre rozpoznanie MAC adresy.
MAC adresa je reprezentovaná ako reťazec šiestich hexadecimálnych
čísiel, ktoré sú navzájom oddelené oddeľovačom. Ako oddeľovač použite
buď znak ':'
, ktorý sa používa v linuxových
systémoch alebo znak '-'
, ktorý sa používa v OS
Windows. Príkladom platnej MAC adresy teda môže byť:
01:23:45:67:89:0a
alebo bc-de-f0-12-34-56
.
Vytvorte regulárny výraz tak, aby pri rozpoznávaní reťazca nezáležalo na
veľkosti znakov.
Úloha
Overte správnosť svojej implementácie.
Pre overenie správnosti svojho regulárneho výrazu môžete použiť niekoľko nástrojov:
- online nástroj Regex Validator (tento nástroj bol a je vytváraný len pre účely tohto predmetu - preto budeme radi, ak ho čo najviac preskúšate)
- online nástroj rexv
- konzolový nástroj
grep
Svoje pokusy môžete skúšať na nasledovnom zozname nesprávnych zápisov MAC adries:
xx:xx:xx:xx:xx:xx
01:23:45-67-89-0a
01:23:45:67:89:0a:
:01:23:45:67:89:0a
01:
toto je mac adresa: 01:23:45:67:89:0a
Poznámka
Ak použijete nástroj grep
, použite ho buď s prepínačom
-E
alebo ho priamo spúšťajte ako nástroj
egrep
, ktorý má už túto voľbu zapnutú.
Úloha
Vytvorte regulárny výraz na rozpoznanie IP adresy a overte svoje riešenie.
K riešeniu tejto úlohy je možné pristupovať dvojako:
- IP adresa je reprezentovaná štvoricou čísiel vzájomne oddelných bodkami
- IP adresa je reprezentovaná štvoricou oktetov vzájomne oddelených bodkami
Prvý prípad je jednoduchší, nakoľko nekontroluje platnosť IP adresy, pretože číslo môže mať ľubovoľný rozsah, resp. ak je obmedzené počtom miest, môže byť mimo platného rozsahu (napr. 999).
Druhý prípad je náročnejší, pretože jeho riešením je regulárny výraz, pomocou ktorého je možné rozlíšiť platný rozsah oktetu IP adresy (teda rozsah od 0 do 255).
Pri riešení teda začnite prvým spôsobom, ktorým overíte len to, či sa naozaj jedná o štyri vzájomne oddelené čísla. Následne sa pokúste vo svojom riešení identifikovať platné oktety IP adresy.
Úloha
Vyfiltrujte z CSV súboru len tie riadky, ktoré majú v 5. a 6. stĺpci hodnotu 1.
Ako CSV súbor môžete použiť nasledujúci výpis:
Meno,Priezvisko,Izba,MAC,wifi,Aktivne,IP
John,Doe,54,00:18:DE:DE:EA:Da,0,1,86
Jason,Statham,54,00:18:DE:DE:EA:DD,1,1,86
Frederick,Forsyth,54,84:A6:C8:5D:CF:73,1,1,84
Jessica,Melon,2X,00:22:15:b9:cd:d2,0,1,36
Abraham,Lincoln,33,01:ac:32:b9:cc:e1,1,0,12
Samo,Chalupka,12,99:ce:ec:22:33:91,0,1,1
Frantisek,Dobrota,13,ab:cd:98:12:cf:ff,0,1,19
Majkl,Dzekson,1,1c:2d:3e:4f:5f:6f,0,1,11
Tento zoznam si uložte do samostatného súboru a následne môžete svoj regulárny výraz skúšať priamo nad ním pomocou nasledovného príkazu:
egrep "regularny vyraz" zoznam.csv
Úloha
Vyfiltrujte z programov napísaných v jazyku C všetky jednoriadkové komentáre.
Jednoriadkové komentáre sa v jazyku C začínajú dvojicou
znakov //
. Vyfiltrujte teda všetko, čo sa nachádza za nimi
až po koniec riadku. Vo výsledku by sa teda mal nachádzať zdrojový kód
bez jednoriadkových komentárov.
Ďalšie úlohy
- Vytvorte regulárne výrazy pre rozpoznávanie
- občianskeho preukazu
- rodného čísla
- dátumu a času
- Pomocou nástroja
grep
vytiahnite z reťazca, ktorý reprezentuje URL adresu len samotnú doménu. Napr.:"http://github.com/carbonfive/raygun"
->"github"
"http://www.zombie-bites.com"
->"zombie-bites"
"https://www.cnet.com"
->"cnet"
- Vytvorte regulárny výraz na identifikovanie URL adresy
reprezentujúcej adresu SMTP serveru pre odosielanie pošty. Tvar URL je
nasledovný:
[PROTOKOL://]URL[:PORT]
, kde:PROTOKOL
špecifikuje použitý protokol, ktorý môže byť buďHTTP
aleboSSL
; táto časť adresy je nepovinnáURL
špecifikuje URL adresu servera; posledná časť domény (reprezentujúca napr. krajinu) môže byť dlhá minimálne 2 písmená a maximálne 6 písmen, pričom môže pozostávať len z písmen a číslicPORT
špecifikuje číslo portu, na ktorom sa SMTP server nachádza (nezabudnite, že číslo portu je zapísané na 16b a preto overte maximálny počet možných cifier/číslic, ktoré sa takto dajú zapísať); táto časť adresy je nepovinná
mail.server.com
postovy.server.na.sk:25
ssl://SMTP.sErvEr.com:465
Ďalšie zdroje
Regulárne výrazy - prednáška z predmetu Programovanie
Regular Expressions 101 - nie len validátor pre regulárne výrazy, ale rovnako sa snaží aj vysvetliť vytvorený zápis výrazu
Regular Expressions Tutorial - ako na regulárne výrazy na stránkach zvon.org