Syntax regulárnych výrazov
Nasledujúci opis regulárnych výrazov vychádza sčasti z dokumentácie knižnice REGEXP, ktorú vytvoril Henry Spencer. Sally používa túto knižnicu na vyhodnocovanie regulárnych výrazov.
Základná syntax regulárnych výrazov
- '^' – na začiatku výrazu zodpovedá začiatku riadka (napríklad '^test' zodpovedá všetkým reťazcom 'test' umiestneným na začiatku riadka)
- '$' – na konci výrazu zodpovedá koncu riadka
- '.' – zodpovedá ľubovoľnému jednému znaku (napríklad 'do.' zodpovedá 'dog', 'dot', 'doe' atď.; 'd..r' zodpovedá 'door', 'deer' atď.)
- '*' – za výrazom zodpovedá 0 alebo viacerým výskytom výrazu (napríklad 'ad*' zodpovedá 'a', 'ad' a 'add' – inými slovami 'a', za ktorým nasleduje ľubovoľný počet 'd')
- '+' – za výrazom zodpovedá 1 alebo viacerým výskytom výrazu (napríklad 'do+' zodpovedá 'do' a 'doo' – teda 'd', za ktorým nasleduje aspoň jedno 'o')
- '?' – za výrazom zodpovedá 0 alebo 1 výskytu výrazu (napríklad 'add?' zodpovedá 'ad' a 'add' – teda 'ad', za ktorým voliteľne nasleduje 'd')
- '|' – medzi výrazmi zodpovedá prvému výrazu, druhému atď. (napríklad 'red|blue|black' zodpovedá 'red', 'blue' a 'black' – teda ľubovoľnému z uvedených slov)
- '[ ]' – znaky v hranatých zátvorkách zodpovedajú jednému ľubovoľnému znaku uvedenému v zátvorkách, ale žiadnemu inému (napríklad 'a[dts]' zodpovedá 'ad', 'at' a 'as' – teda 'a', za ktorým nasleduje 'd', 't' alebo 's')
- '[^ ]' – znaky v hranatých zátvorkách zodpovedajú jednému ľubovoľnému znaku neuvedenému v zátvorkách, ale žiadnemu inému (napríklad '[^abc]' zodpovedá ľubovoľnému znaku okrem 'a', 'b' a 'c')
- '[-]' – označuje rozsah znakov (napríklad '1[0-9]' zodpovedá všetkým číslam od '10' do '19')
- '( )' – spojí výrazy v zátvorkách do jedného (napríklad '(very )*well' zodpovedá 'well', 'very well' a 'very very well' – teda ľubovoľnému počtu 'very ', za ktorým nasleduje 'well')
- '\' – pred ľubovoľným znakom zodpovedá tomuto znaku (napríklad 'too\.' zodpovedá iba 'too.'; všimnite si, že 'too.' zodpovedá 'tool', 'took' aj 'toon' – teda 'too', za ktorým nasleduje ľubovoľný znak)
Syntax regulárnych výrazov
Regulárny výraz pozostáva z nula alebo viacerých vetiev oddelených '|'. Zodpovedá všetkému, čo zodpovedá jednej z vetiev.
Vetva pozostáva z nula alebo viacerých častí spojených za sebou. Zodpovedá prvej časti nasledovanej druhou a tak ďalej.
Časť je atóm, za ktorým môže nasledovať '*', '+' alebo '?'. Atóm nasledovaný '*' zodpovedá postupnosti 0 alebo viacerých zhôd atómu. Atóm nasledovaný '+' zodpovedá postupnosti 1 alebo viacerých zhôd atómu. Atóm nasledovaný '?' zodpovedá zhode atómu alebo prázdnemu reťazcu.
Atóm je regulárny výraz v zátvorkách (zodpovedá tomu, čomu tento výraz), rozsah (pozri nižšie), '.' (ľubovoľný jeden znak), '^' (prázdny reťazec na začiatku riadka), '$' (prázdny reťazec na konci riadka), '\' nasledované jedným znakom (zodpovedá tomuto znaku) alebo jeden znak bez osobitného významu (zodpovedá tomuto znaku).
Rozsah je postupnosť znakov uzavretá v '[]'. Bežne zodpovedá jednému ľubovoľnému znaku z postupnosti. Ak postupnosť začína '^', zodpovedá jednému ľubovoľnému znaku, ktorý nie je vo zvyšku postupnosti. Dva znaky oddelené '-' sú skratkou pre celý zoznam znakov ASCII medzi nimi (napr. '[0-9]' zodpovedá ľubovoľnej desiatkovej číslici). Doslovný znak ']' uveďte ako prvý (za prípadným '^'). Doslovný znak '-' uveďte ako prvý alebo posledný.
Nejednoznačnosť
Ak by regulárny výraz mohol zodpovedať dvom rôznym častiam textu, zvolí sa tá, ktorá začína skôr. Ak obe začínajú na rovnakom mieste, ale majú rôznu dĺžku alebo rovnakú dĺžku dosahujú rôznymi spôsobmi, pravidlá sú zložitejšie, ako je uvedené ďalej.
Vo všeobecnosti sa možnosti v zozname vetiev skúšajú zľava doprava, možnosti pre '*', '+' a '?' od najdlhšej, vnorené konštrukcie od vonkajšej dovnútra a spojené konštrukcie od ľavej. Vyberie sa zhoda používajúca najskoršiu možnosť.
Napríklad '(ab|a)b*c' môže zodpovedať 'abc' dvoma spôsobmi. Prvá voľba je medzi 'ab' a 'a'; keďže 'ab' je skôr a vedie k úspešnej celkovej zhode, vyberie sa. Keďže 'b' už bolo použité, 'b*' musí zodpovedať poslednej možnosti – prázdnemu reťazcu –, aby rešpektovalo skoršiu voľbu.
V osobitnom prípade bez '|' a s jediným '*', '+' alebo '?' sa zvolí najdlhšia možná zhoda. Teda 'ab*' pri texte 'xabbbby' zodpovedá 'abbbb'. Ak sa však 'ab*' skúša na 'xabyabbbz', zodpovedá 'ab' hneď za 'x' podľa pravidla najskoršieho začiatku.
From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository