Keška nemusí byť regulárna aby bola regulárna
Pojem regulárny výraz je možno pre mnoho ľudí pojmom neznámym, preto tento pojem v nasledujúcich riadkoch trochu vysvetlíme.
Tento pojem používajú vo všobecnosti ľudia pohybujúci sa okolo počítačov, hlavne ľudia zaoberajúci sa programovaním. Označuje sa ním reťazec znakov, ktorý slúži na definovanie nejakého vzoru, ktorý chceme vyhľadať v texte. Prípadne keď chceme skontrolovať, či daný text spĺňa nejaké definované pravidlá.
Príkladom takéhoto textu môže byť napríklad kontrola toho, či je zadaný text mailová adresa, alebo či je to telefónne číslo, prípadne čokoľvek, čo si len dokážete predstavit.
Ak si myslíte, že regulárne výrazy nemáte kde použiť, tak by som vás rád vyviedol z omylu. Vo väčšine textových editorov (Office, Notepad a iné) podporujú vyhľadávanie a nahrádzanie znakov použitím regulárnych výrazov. To samozrejme neznamená, že ich používať musíte, ale prečo nie, že?
Tu už prišiel čas na to, aby sme si ukázali nejaký ten regulárny výraz, prípadne si priblížili základnú syntax tohto jazyka. Pretože regulárne výrazy pre rôzne systémy majú svoje špecifiká, tu sa zameriame na regulárne výrazy pre jazyk c#.
Príklad regulárneho výrazu na identifikovanie mailovej adresy: (?[^@]+)@(?.+)
Syntax regulárnych výrazov
Spomenuté tu budú len výrazy, ktoré sú v krížovke
Znaky a špeciálne vyjadrenie znakov |
Znak |
Význam |
Popis použitia |
A |
znak A |
A zodpovedá napríklad A :). Písmeno zodpovedá samé sebe |
. |
ľubovoľný znak |
a.c zodpovedá napríklad abc alebo axc, ... |
Kvantifikátory - opakovanie predchádzajúceho výrazu |
? |
nula alebo jeden znak |
a?b zodpovedá napríklad b alebo ab (ničomu inému) |
* |
nula a viac znakov za sebou |
a*b zodpovedá napríklad b alebo aaaaab, ...
časté použitie je .* čo zodpovedá tomuto: ľubovoľný počet ľubovoľných znakov |
+ |
jeden a viac znakov za sebou |
a+b zodpovedá napríklad ab alebo aaaaab, ale nie b |
Skupiny |
[ ] |
vyber jeden znak zo zoznamu |
[abc] zodpovená buď a alebo b alebo c |
[^ ] |
vyber znak ktorý nie je v zozname |
[^abc] zodpovená ľubovoľnému znaku, ktorý nie je a, b ani c
Napríklad x, h, u |
Výber, opakovanie nájdeného výrazu |
| |
vyber z možností jednu |
malá|veľká zodpovedá buď malá alebo veľká |
( ) |
skupina, na ktorú môžeš aplikovať kvantifikátor |
(ab)* zodpovedá napríklad ababab alebo aj prázdnemu reťazcu |
( ) |
skupina, na ktoú sa možno odkázať |
skupiny sú číslované porade od 1 a odkazuje sa \1, \2, ...
(a.)x\1 zodpovedá napríklad abxab alebo acxac |
Jednotlivé výrazy môžete samozrejme za sebou ľubovoľne zoraďovat
Ďalšie materiály nájdete napríklad tu:
Wikipedia
C# Regular Expressions Cheat Sheet
Shrnutí syntaxe regulárních výrazů
Vysvetlenie niektorých výrazov z tajničky
V tajničke sú použité rôzne kombinácie predchádzajúcich výrazov, preto je vhodné vysvetliť niektoré možnosti
Výraz |
Spôsob pochopenia, význam |
Príklad reťazcov |
(O|RHH|MM)* |
V riadku budú za sebou použité ľubovoľné z reťazcov O, RHH, MM
Ľubovoľný počet krát opakuj výber z reťazcov O, RHH a MM |
RHHMMMMO
OORHHRHH
(prázdny reťazec) |
.*(.)(.)(.)(.)\4\3\2\1.* |
Riadok začne ľubovoľným počtom ľubovoľných znakov.
Potom sú tam štyri znaky, ktoré sa potom zopakujú v opačnom poradí
Potom je v riadku znovu ľubovoľný počet ľubovoľných znakov |
AXCQWERREWQ
QWERREWQAXC
QWERREWQ |
Zadanie kešky
A teraz už ku keške. V nasledujúcom obrázku je zadanie, ktoré potrebujete vyriešiť.
V nasledujúcej tebuľke preložíte písmeno na číslo.
A
|
1
|
C
|
2
|
D
|
3
|
E
|
4
|
G
|
5
|
H
|
6
|
I
|
7
|
M
|
8
|
N
|
9
|
O
|
0
|
P
|
1
|
R
|
2
|
S
|
3
|
T
|
4
|
X
|
5
|
Výsledná súradnica je potom
N 48° (N1)(N2).(N3)(N4)(N5)
E 017° (E1)(E2).(E3)(E4)(E5)
A samozrejme nemôžeme zabudnúť na checker, aj keď to možno nie je potrebné