Tester regulárních výrazů: sestavte a laďte vzory na vlastním textu
Regulární výraz je malý jazyk pro popis tvaru textu. Místo otázky "je tu přesně toto slovo?" vám regex umožní ptát se "je tu řetězec, který vypadá takto?" Právě proto je tak silný pro hledání, validaci, extrakci a nahrazování textu v editorech kódu, log souborech, formulářových vstupech a skriptech. Zároveň je to důvod, proč je snadné se splést, protože vzor, který v hlavě vypadá v pořádku, může potichu odpovídat příliš mnoha, příliš málo nebo vůbec ničemu.
Proto interaktivní testování poráží hádání. Když napíšete vzor a sledujete, jak se shody rozsvěcují napříč skutečným ukázkovým textem, dostáváte okamžitou zpětnou vazbu: vidíte, co bylo zachyceno, co proklouzlo a která zachytávací skupina uchopila kterou část. Náš tester regulárních výrazů běží zcela ve vašem prohlížeči. Váš vzor i ukázkový text nikdy neopustí stránku, takže můžete vkládat řádky logů, e-maily nebo produkční data, aniž byste cokoliv posílali na server.

Stavební kameny, které se vyplatí znát
Většina běžných vzorů je poskládána z malé sady dílků. Naučte se je a dokážete přečíst většinu regexů, se kterými se v praxi setkáte.
Znakové třídy popisují množinu povolených znaků. [aeiou] odpovídá libovolné samohlásce, [0-9] odpovídá jedné číslici a [a-zA-Z] odpovídá jednomu písmenu. Stříška uvnitř hranatých závorek množinu neguje, takže [^0-9] znamená "libovolný znak, který není číslice". Zkratky šetří psaní: \d je číslice, \w je znak slova (písmena, číslice, podtržítko), \s je bílý znak a tečka . odpovídá téměř jakémukoliv jednomu znaku.
Kvantifikátory určují, kolikrát se předchozí kus může opakovat. * znamená nula nebo více, + znamená jedna nebo více a ? znamená nula nebo jedna (volitelně). Pro přesné počty {3} znamená přesně tři a {2,4} znamená dvě až čtyři. Takže \d{4} odpovídá čtyřmístnému roku a colou?r odpovídá oběma pravopisným variantám.
Kotvy připíchnou vzor k pozici, ne ke znaku. ^ odpovídá začátku textu, $ odpovídá konci a \b značí hranici slova. Vzor ^Error odpovídá jen řádkům, které začínají na "Error", což je přesně to, co chcete při procházení logů.
Skupiny obalí část vzoru do kulatých závorek, a to jak pro aplikaci kvantifikátoru na více znaků najednou, tak pro zachycení odpovídajícího textu k pozdějšímu použití. V (\d{4})-(\d{2})-(\d{2}) každá skupina zachytí jednu složku data, kterou pak můžete vytáhnout. Alternace s pipe funguje jako "nebo": cat|dog|fish odpovídá kterémukoliv z těchto tří slov.
Vzory, po kterých v praxi skutečně sáhnete
Několik opakujících se úkolů pokrývá většinu skutečné práce. K zachycení něčeho email-like je [\w.+-]+@[\w-]+\.[\w.-]+ pragmatický výchozí bod; plná validace e-mailu podle formální specifikace je pověstně komplikovaná a volnější vzor je obvykle správnou volbou pro zvýraznění kandidátů, ne pro odmítání uživatelů.
Pro čísla \d+ zachytí posloupnosti číslic, zatímco -?\d+(\.\d+)? odpovídá volitelně záporným a desetinným číslům. K oříznutí bílých znaků na začátku a konci porovnejte ^\s+|\s+$ a nahraďte prázdným řetězcem. K nalezení zdvojených slov odpovídá vzor se zpětnou referencí \b(\w+)\s+\1\b slovu následovanému sebou samým, kde \1 odkazuje zpět na první zachycenou skupinu.

Příznaky mění chování porovnávání
Příznaky jsou přepínače, které upravují chování celého vzoru. Globální příznak (g) najde každou shodu místo zastavení u první, což je to, co chcete při zvýrazňování všech výskytů. Příznak bez ohledu na velikost písmen (i) způsobí, že error odpovídá "Error" i "ERROR" stejně. Příznak víceřádkový (m) mění chování ^ a $, takže odpovídají začátku a konci každého řádku, ne jen celého textu, což je nezbytné pro práci s logy po řádcích. Mezi další užitečné příznaky patří s (dotall, umožňující tečce odpovídat i novým řádkům) a u pro plnou podporu Unicode.
Dialekty se podle jazyka mírně liší
Regex je rodina dialektů, ne jeden pevný standard. JavaScript, Python, PCRE (PHP), Java, .NET, Go a Rust se shodují na základní syntaxi popsané výše, ale liší se na okrajích: podpora lookbehind, syntaxe pojmenovaných skupin ((?<name>...) versus (?P<name>...)), únikové sekvence pro vlastnosti Unicode a to, které příznaky existují, se všechno liší. Vzor, který funguje v jednom enginu, může v jiném vyžadovat drobnou úpravu, proto se vyplatí testovat proti dialektu, se kterým skutečně nasazujete. Až budete mít vzor doladěný, naše další nástroje pro vývojáře a textové nástroje vám pomohou s okolní prací čištění, kódování a transformace dat, která jste právě zachytili.
Často kladené otázky
Odesílá se můj text na server?
Ne. Tester regulárních výrazů běží zcela ve vašem prohlížeči. Váš vzor i ukázkový text zůstávají na vašem zařízení a nikdy se neodesílají, takže je bezpečné vkládat i citlivá data.
Který dialekt regexu tento nástroj používá?
Používá engine regulárních výrazů JavaScriptu zabudovaný ve vašem prohlížeči. Základní syntaxe odpovídá tomu, co znáte z většiny jazyků, ačkoliv některé pokročilé funkce se mírně liší od PCRE, Pythonu nebo .NET.
Jaký je rozdíl mezi hladovým a líným porovnáváním?
Ve výchozím nastavení jsou kvantifikátory hladové a zabírají co nejvíce textu. Přidání otazníku je udělá líné, takže zabírají co nejméně. Například vzor tečka hvězdička je hladový, zatímco tečka hvězdička otazník je líný.
Jak zachytit doslovný speciální znak?
Uveďte ho zpětným lomítkem. Chcete-li zachytit skutečnou tečku, napište zpětné lomítko a tečku. Totéž platí pro další metaznaky, jako jsou kulaté a hranaté závorky, znaménko plus a otazník.
Proč můj vzor nic nezachytí?
Běžnými příčinami jsou chybějící globální příznak, kotvy připíchnuté ke špatné pozici, neuvedený speciální znak nebo hladové kvantifikátory přesahující hranici, kterou jste očekávali. Testujte po částech, abyste našli viníka.
Mohu zachytit části shody?
Ano. Obalte část vzoru kulatými závorkami a vytvoříte zachytávací skupinu. Každá skupina je hlášena samostatně, což umožňuje extrahovat pole, jako je rok, měsíc a den z data.
