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

Ú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:

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

  1. Vytvorte regulárne výrazy pre rozpoznávanie
    • občianskeho preukazu
    • rodného čísla
    • dátumu a času
  2. 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"
  3. 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 alebo SSL; 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 číslic
    • PORT š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á
    V hranatých zátvorkách sú uvedené nepovinné časti. Celá URL nezávisí na veľkosti písmen. Príkladom vyhovujúcich URL adries môžu byť:
    • mail.server.com
    • postovy.server.na.sk:25
    • ssl://SMTP.sErvEr.com:465

Ďalšie zdroje