Syntaxe regulárních výrazů
Následující popis regulárních výrazů částečně vychází z dokumentace knihovny REGEXP, kterou vytvořil Henry Spencer. Sally ji používá pro vyhodnocování regulárních výrazů.
Základní syntaxe regulárních výrazů
- '^' - na začátku výrazu odpovídá začátku řádku (například '^test' najde všechny řetězce 'test' na začátku řádku)
- '$' - na konci výrazu odpovídá konci řádku
- '.' - odpovídá libovolnému jedinému znaku (například 'do.' odpovídá 'dog', 'dot', 'doe' atd.; 'd..r' odpovídá 'door', 'deer' atd.)
- '*' - za výrazem odpovídá 0 nebo více opakováním výrazu (například 'ad*' odpovídá 'a', 'ad' a 'add', tedy 'a' následovanému libovolným počtem 'd')
- '+' - za výrazem odpovídá 1 nebo více opakováním (například 'do+' odpovídá 'do' a 'doo', tedy 'd' následovanému alespoň jedním 'o')
- '?' - za výrazem odpovídá 0 nebo 1 výskytu (například 'add?' odpovídá 'ad' a 'add', tedy 'ad' následovanému volitelným 'd')
- '|' - mezi výrazy odpovídá prvnímu, druhému atd. (například 'red|blue|black' odpovídá 'red', 'blue' a 'black', tedy kterémukoli z uvedených slov)
- '[ ]' - odpovídá jedinému znaku uvedenému v závorkách, žádnému jinému (například 'a[dts]' odpovídá 'ad', 'at' a 'as', tedy 'a' následovanému 'd', 't' nebo 's')
- '[^ ]' - odpovídá jedinému znaku neuvedenému v závorkách (například '[^abc]' odpovídá každému znaku kromě 'a', 'b' a 'c')
- '[-]' - označuje rozsah znaků (například '1[0-9]' odpovídá všem číslům od '10' do '19')
- '( )' - spojuje výrazy v závorkách do jednoho (například '(very )*well' odpovídá 'well', 'very well' a 'very very well', tedy libovolnému počtu 'very ' následovanému 'well')
- '\' - před znakem odpovídá tomuto znaku (například 'too\.' odpovídá pouze 'too.', zatímco 'too.' odpovídá 'tool', 'took' i 'toon', tedy 'too' následovanému libovolným znakem)
Syntaxe regulárních výrazů
Regulární výraz tvoří nula nebo více větví oddělených '|'. Odpovídá všemu, čemu odpovídá některá větev.
Větev tvoří nula nebo více spojených částí. Odpovídá první části následované druhou a tak dále.
Část tvoří atom, za kterým může být '*', '+' nebo '?'. Hvězdička znamená 0 nebo více opakování atomu, '+' znamená 1 nebo více a '?' jeden výskyt atomu nebo prázdný řetězec.
Atom je regulární výraz v závorkách, rozsah (viz níže), '.' pro libovolný znak, '^' pro prázdný řetězec na začátku řádku, '$' pro prázdný řetězec na konci řádku, '\' následované jediným znakem pro tento znak nebo samostatný znak bez zvláštního významu pro tento znak.
Rozsah je posloupnost znaků uzavřená v '[]'. Obvykle odpovídá jedinému znaku z této posloupnosti. Začíná-li '^', odpovídá jedinému znaku mimo zbývající posloupnost. Dva znaky oddělené '-' zastupují celý rozsah ASCII mezi nimi, například '[0-9]' libovolnou desítkovou číslici. Doslovný znak ']' umístěte na začátek za případné '^'. Doslovný '-' dejte na začátek nebo konec.
Nejednoznačnost
Může-li regulární výraz odpovídat dvěma různým částem textu, vybere se ta, která začíná dříve. Začínají-li stejně, ale mají jinou délku nebo stejnou délku s různým způsobem shody, použijí se následující pravidla.
Větve se obecně zkoušejí zleva doprava; možnosti '*', '+' a '?' od nejdelší; vnořené konstrukce od nejvnější dovnitř a spojené konstrukce zleva. Vybere se shoda využívající nejdříve zkoušenou možnost.
Například '(ab|a)b*c' může odpovídat 'abc' dvěma způsoby. Nejprve se volí mezi 'ab' a 'a'. Protože 'ab' je první a vede k celkové shodě, vybere se. Znak 'b' je již spotřebován, takže 'b*' musí respektovat předchozí volbu a odpovídat své poslední možnosti, prázdnému řetězci.
Není-li přítomno '|' a výraz obsahuje jen jedno '*', '+' nebo '?', vybere se nejdelší možná shoda. Výraz 'ab*' tedy v 'xabbbby' najde 'abbbb'. V 'xabyabbbz' však najde 'ab' hned za 'x', protože platí pravidlo nejdřívějšího začátku.
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