Tahák se základy regulárních výrazů
Regulární výraz (regex) je vzorek pro shodu textu. Každý symbol, nazývaný token, mění chování vzorku. Tahák níže uvádí nejužitečnější tokeny s jednoduchým významem a malým příkladem k zkopírování.
| Token | Význam | Příklad |
|---|---|---|
| . | Matches any single character except newline. | a.c matches abc, a c |
| * | Matches the preceding token zero or more times. | ab* matches a, abb |
| + | Matches the preceding token one or more times. | ab+ matches ab, abb |
| ? | Makes the preceding token optional (zero or one). | colou?r matches color, colour |
| [] | Character set: matches any one character inside. | [aeiou] matches any vowel |
| [^] | Negated set: matches any character NOT inside. | [^0-9] matches any non-digit |
| \d | Matches any digit (0-9). | \d+ matches 42, 007 |
| \w | Matches any word character (a-z, A-Z, 0-9, _). | \w+ matches hello_1 |
| \s | Matches any whitespace (space, tab, newline). | a\sb matches a b |
| ^ | Anchors the match to the start of a line/string. | ^Hello matches start of string |
| $ | Anchors the match to the end of a line/string. | world$ matches end of string |
| | | Alternation: matches the pattern on either side. | cat|dog matches cat or dog |
| () | Groups a sub-pattern (and captures it). | (ab)+ matches ab, abab |
| {n,m} | Quantifier: match the preceding token n to m times. | a{2,4} matches aa, aaaa |
| (?i) | Inline flag: makes the pattern case-insensitive. | (?i)hello matches HELLO |
Poznámky
- Většina tokenů ztrácí uvnitř třídy znaků [ ] svůj speciální význam. Například . uvnitř [] odpovídá jen obyčejné tečce.
- Zpětné lomítko (\) je escape znak: změní speciální token na literál a naopak.
- Engine se liší: Python, JavaScript, PCRE a Golang sdílejí většinu tokenů, ale podpora příznaků a look-around se liší.
Časté dotazy
- S čím se shoduje tečka (.) ?
- Ve výchozím stavu se tečka shoduje s jakýmkoli jedním znakem kromě nového řádku. Pro doslovnou tečku ji musíte uvést jako \.
- Jaký je rozdíl mezi * a + ?
- Hvězdička * se shoduje s předchozím tokenem nula a vícekrát, takže 'ab*' se shoduje i s 'a'. Plus + vyžaduje alespoň jednou, shoduje se s 'ab', ale ne s pouhým 'a'.
- Jak se shodnu s číslicí nebo znakem slova?
- Použijte \d pro libovolnou číslici (0-9) a \w pro znak slova (písmena, číslice, podtržítko). Negace jsou \D a \W.
- K čemu slouží ^ a $ ?
- ^ ukotvuje shodu na začátek řetězce či řádku; $ na konec. Společně ^vzor$ vynutí shodu celého řetězce.