Regulární výrazy jsou mocný nástroj — pokud víte jak. Praktický cheat sheet k bookmarknutí.
Základní znaky¶
. \d \D \w \W \s \S \b
Kvantifikátory¶
* + ? {3} {2,5} {3,} *?
Skupiny¶
(abc) (?:abc) a|b \1
Lookahead/behind¶
(?=x) (?!x) (?<=x) (?<!x)
Příklady¶
Email: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}
IP: \b(?:\d{1,3}.){3}\d{1,3}\b
Datum: \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
Tel CZ: (?:+420)?\s?\d{3}\s?\d{3}\s?\d{3}
V praxi¶
grep -oP ‘\b\d{1,3}(.\d{1,3}){3}\b’ access.log
import re; emails = re.findall(r’[\w.+-]+@[\w-]+.[\w.]+’, text)
Pokročilé techniky¶
Named groups ((?P<name>...) v Pythonu) zvyšují čitelnost regexů a umožňují přístup k zachyceným skupinám přes jméno. Non-capturing groups ((?:...)) seskupují bez zachytávání, což zrychluje engine. Lookahead ((?=...)) a lookbehind ((?<=...)) kontrolují kontext bez jeho zahrnutí do výsledku — užitečné pro validace hesel (musí obsahovat číslo, ale nechcete číslo v matchi).
Atomic groups a possessive quantifiers zabraňují backtracking a chrání před ReDoS (Regular Expression Denial of Service). Vždy testujte regex na edge cases a velkých vstupech. Lazy quantifiers (*?, +?) matchují minimum znaků, oproti greedy variantám, které matchují maximum. Pro složité parsování (HTML, JSON, programovací jazyky) nepoužívejte regex — použijte dedikovaný parser.
Tip¶
Testujte na regex101.com. A pokud regex přesáhne 2 řádky, zvažte parser.