Regular Expressions

Regulárne výrazy a ich použitie

Motivácia

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.

Ciele

  1. Naučiť sa vytvárať vlastné regulárne výrazy.

Postup

Krok #1: 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 1.1

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 1.2

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 1.3

Vytvorte regulárny výraz na rozpoznanie IP adresy a overte svoje riešenie.

K riešeniu tejto úlohy je možné pristupovať dvojako:

  1. IP adresa je reprezentovaná trojicou čísiel vzájomne oddelných bodkami
  2. IP adresa je reprezentovaná trojicou 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 1.4

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 1.5

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.

Krok #2: Find the Password

Úloha 2.1

Stiahnite si program heslo.c, preložte ho a spustite ho.

Úloha 2.2

Zobrazte si obsah súboru a pokúste sa zistiť heslo, ktoré program očakáva.

Krok #3: Regular Expressions in C

Doplnkové úlohy

Diskusia

Upozornenie: Do svojich príspevkov nevkladajte správne riešenia úloh a ani ich od ostatných nežiadajte! Nepoužívajte sprosté slová! Takéto príspevky budú zmazané! Riaďte sa podľa pravidiel etického kódexu.