Začínáme s Regexem: Regulární výrazy usnadňují

Zveřejnění: Vaše podpora pomáhá udržovat provoz webu! Za některé služby, které na této stránce doporučujeme, dostáváme poplatek za doporučení.


Regulární výraz, regex nebo krátce regexp, je posloupnost písmen a symbolů, která definuje logický vzor. Řetězce textu pak mohou být porovnány se vzorem za účelem identifikace řetězců, které odpovídají logickému vzoru definovanému regexem. Na základě tohoto srovnání lze regex použít k identifikaci řetězců textu, které splňují specifické požadavky, nebo k ověření, zda řetězce splňují požadovaný vzor.

Pokud se zdá, že toto vysvětlení regexu je trochu abstraktní, možná se podíváme na několik běžných použití regexu, která objasní jejich užitečnost. Regex se používají po celou dobu v počítačovém programování. Zde je například několik běžných použití pro regex:

  • Ověření, že e-mailová adresa zadaná do webového formuláře je správně formulovaná e-mailová adresa.
  • Identifikace všech souborů v počítačovém systému, které končí určitou příponou souboru.
  • Chcete-li zkontrolovat adresy URL požadované od webového serveru a provést přesměrování, pokud adresy URL odpovídají vzoru regex.

Je důležité pochopit, že regex je logický systém pro popis vzorců, nikoli jazyk. Regex však byl implementován v mnoha různých programovacích jazycích a lze jej také použít pro vyhledávání textu v mnoha textových editorech.

Historie regexu

Regex byl koncipován jako teoretický princip informatiky, když byl vytvořen v roce 1956 matematikem Stephenem Cole Kleenem. Zpočátku byl regex čistě teoretický. V roce 1968 byl však poprvé použit v počítačové aplikaci, když ji Ken Thompson začlenil do textového editoru QED. Thompson nebyl sám při přijímání regexu. Přibližně ve stejné době Douglas T Ross včlenil regex pro lexikální analýzu do kompilátoru.

Tyto první implementace regexu byly brzy následovány. Na počátku sedmdesátých let byly do textového editoru Unix, ed. Krátce nato byl syntaktický analyzátor vestavěný do edu spuštěn jako samostatný unixový nástroj zvaný grep. V tom okamžiku to bylo jen otázkou času, než byla podpora regexu začleněna do mnoha unixových utilit a aplikací včetně vi, lex, sed, Awk, expr, Emacs a dalších.

Než se regex dostal do různých koutů operačního systému Unix, byl zakořeněn. Stále však existoval prostor pro zlepšení. Původní syntaxe regonu vyvinutá společností Kleene byla vylepšena v 80. letech, kdy byla podpora rozšířených vzorů regexu přidána do Perlu na základě rozšířené regulární knihovny napsané Henrym Spencerem. Avšak i po přidání regexu do Perl Spencer pokračoval v rozšiřování myšlenky a pozdější a pokročilejší iterace jeho knihovny byla zabudována do programovacího jazyka Tcl – a tato implementace se nakonec dostala do špičkových projektů moderní správy informací. jako PostgreSQL.

Během 80. let nebyl regex nikdy standardizován. To se však změnilo v roce 1992, kdy byl regex standardizován v POSIX.2. Dnes je regex podporován mnoha různými programovacími jazyky a textovými editory. Většina moderních implementací je kompatibilní s POSIX, ale obecně se standardy POSIX rozšiřují různými způsoby, které se liší od jedné implementace k další. Výsledkem je, že zatímco základní vzory regexů se obvykle shodují od jedné implementace k další, pokročilé vzorce se mohou značně lišit v závislosti na prostředí, ve kterém jsou použity..

Jak Regex funguje

Regulární výraz je kombinací dvou typů znaků: literálů a speciálních znaků. V kombinaci tyto znaky definují logický vzor. Řetězce textu lze porovnat s tímto vzorem a zjistit, zda odpovídají vzoru definovanému výrazem.

Doslovné postavy se představují. To znamená, že doslovné písmeno a představuje písmeno a a doslovné číslo 1 představuje číslici 1. Regex však není velmi cenný, pokud je omezen na doslovné znaky. Zvláštní znaky jsou to, co činí regex užitečným.

Speciální znaky mají logický význam v regexovém vzoru. Například se podívejme na tečku. Tečka nebo období se používá k reprezentaci libovolného znaku. Takže, .a by odpovídalo jakékoli dvoumístné posloupnosti, ve které byl druhý znak doslovným písmenem a. To znamená, že ba, 1a, -a, aa a písmeno, kterému předchází prázdné místo, by se shodovaly s regulárním vzorcem.

Tečka není jediným zvláštním znakem v regexu. Existuje asi tucet speciálních znaků, které lze kombinovat s literály a popisovat složité logické vzorce. Podívejme se na dva příklady toho, jak se kombinují literály a speciální postavy pro definování složitých výrazů:

  • Pokud jste se chtěli ujistit, že řetězec textu je e-mailová adresa, můžete ji otestovat pomocí tohoto vzorového vzoru: ^ [A-Z0-9 ._% + -] [e-mail chráněn] [A-Z0-9.-] +. [AZ] {2,} $.
  • Chcete-li skenovat názvy souborů a zachytit všechny, které skončily příponou .php, můžete použít následující regex: ^. *. Php $.

Pokud jste v regexu nováčkem, jsou tyto vzorce pravděpodobně matoucí. Abyste pochopili, jak tyto vzorce fungují, musíte pochopit, co znamenají všechny speciální znaky.

Regex Speciální postavy

I když se každá implementace regexu v některých ohledech liší, obecně se všichni chovají s těmito speciálními znaky stejně, až na několik výjimek.

  • : Znak zpětného lomítka se používá k úniku z jiných speciálních znaků. Takže pokud si přejete uniknout jiné postavě, jako je tečka, aby byla interpretována jako doslovná postava, můžete tak učinit tím, že předešete tečce se zpětným lomítkem jako je tato: .
  • ^: Uptick se používá k označení počáteční pozice v řetězci. Regex ^ a by odpovídal každému řetězci začínajícímu doslovným písmenem a.
  • $: Znak dolaru se používá k dosažení koncové pozice v řetězci. Regex $ by odpovídal řetězci končícímu doslovným písmenem a.
  • .: Tečka nebo tečka odpovídá libovolnému znaku kromě znaku nového řádku (n). Regex 1.3 by odpovídal jakémukoli řetězci s doslovným, jakýmkoli znakem a doslovným třem, jako jsou 123, 1a3 a dokonce 1 3.
  • |: Svislá trubka je operátor výběru a lze ji interpretovat jako stand-in pro slovo nebo. Regex a | b lze tedy číst jako „a nebo b“ a bude odpovídat buď písmenům a nebo písmenům b.
  • *: Hvězdička se používá k tomu, aby odpovídala předchozímu znaku nula nebo vícekrát. Regex. * By tedy odpovídal libovolnému řetězci, pokud neobsahoval znak nového řádku.
  • ?: Otazník bude odpovídat předchozímu znaku nula nebo jednou, ale už ne. Regex 123? bude tedy odpovídat buď 12 nebo 123.
  • +: Symbol plus se shoduje s předchozím znakem jednou nebo vícekrát, ale znak se musí objevit alespoň jednou, na rozdíl od hvězdičky, která odpovídá předchozímu znaku nula nebo vícekrát. Regex a * b + by tedy odpovídal ab a b, ale ne a, protože b se musí objevit alespoň jednou kvůli použití symbolu plus.
  • […]: Závorky odpovídají jedinému znaku obsaženému v závorkách. Nebo můžete přidat uptick, jako je tento [^ …], aby odpovídal jakékoli postavě, která není obsažena v závorkách. V závorkách nemusíte unikat zvláštním znakům, budou interpretovány jako literály. Závorky se často používají k definování rozsahů znaků. Například regex [0-9] by odpovídal každé jediné číslici a [A-Z] by odpovídal každému velkému písmenu v anglické abecedě. Konečně závorky mohou obsahovat znaky oddělené čárkami. Takže [a, g] by odpovídalo některému z písmen a a g.
  • {…}: složené závorky, nazývané explicitní kvantifikátory, určují, kolikrát se musí předchozí znak objevit. Regex ab {2} c může být splněn pouze abbc. Druhé číslo lze přidat k vytvoření rozsahu přijatelných hodnot. Takže ab {2,3} c by odpovídalo buď abbc nebo abbbc a [0-9] {1,2} by odpovídalo jakémukoli jednomu nebo dvoumístnému číslu.
  • (…): Parentéza se používá k označení podvýrazu ve větším výrazu. Regex (abc) * by tedy odpovídal řetězci složenému z písmen abc, ale všechna tři písmena se musí objevit společně a v tomto pořadí.

Samy o sobě jsou zvláštní postavy poněkud užitečné. V kombinaci těchto speciálních postav s literály lze popsat silné vzory. Výše uvedený seznam speciálních znaků obsahuje několik jednoduchých kombinací speciálních znaků. Podívejme se na regex pro identifikaci souborů PHP a uvidíme, jak tyto postavy spolupracují.

Zde je uvedený regex: ^. *. Php $. Vezměme si to po jednom.

  • ^ označuje začátek testovacího řetězce, kterým by v tomto případě byl název souboru.
  • .* společně naznačují, že název souboru může obsahovat libovolný počet libovolných znaků, ale žádné nové řádky.
  • .php začíná znakem escape, který zajišťuje, že tečka je interpretována jako doslovný, nikoli jako speciální znak. Dále doslovná písmena php označují, že za názvem souboru chceme zkontrolovat kombinaci tečky a písmen php.
  • $ označuje, že přípona .php se musí objevit na konci vyhledávacího řetězce, aby byla shodná.

Jak vidíte, regex dokáže vytvořit logický vzorec, který dokáže prosévat složité názvy souborů a určit ty, které končí příponou .php, a to pouze devíti znaky.

Unicode a Regex

Jedním z problémů, který se může objevit při jednání s regexem, je to, jak se vypořádat s jazyky, které používají znaky, které nejsou součástí moderní anglické abecedy. Unicode je kódovací standard, který se pokouší vyřešit tento problém kódováním číslic do číselných hodnot.

Některé implementace regexu podporují použití Unicode k vytváření regulárních vzorů, což znamená, že lze vytvořit regexové vzory, které budou moci testovat řetězce obsahující znaky z různých jazyků. Kromě toho lze výrazy Unicode kombinovat s literály a speciálními znaky, aby se vytvořily složité regexové vzory.

Mezi nejčastější regulární vzory Unicode patří:

  • p {L}: Shoduje se s jakýmkoli písmenem v jakémkoli jazyce. Takže p {L} {2,4} odpovídá každé posloupnosti písmen o délce dvou až čtyř znaků.
  • p {Z}: Shoduje se s libovolnými mezerami.
  • p {N}: Shoda číselných znaků.
  • p {P}: Shoduje se s interpunkčními znaménky.

Existuje mnoho dalších vlastností Unicode, které můžete použít při vytváření regulárních výrazů, za předpokladu, že implementace, se kterou pracujete, podporuje regulár Unicode. Chcete-li se dozvědět více, přečtěte si regulární výrazy Unicode na Regular-Expressions.info.

Zdroje

V tomto primeru jsme se zabývali jen natolik, abychom vám poskytli základní představu o tom, jak regex funguje a jak jej můžete použít k určení konkrétních bitů kódu a textu v textovém editoru nebo k identifikaci a ověření dat v počítačovém aplikaci. Chcete-li se dozvědět více, podívejte se na následující zdroje, které poskytly pokročilejší informace, než jaké jsou uvedeny v tomto krátkém tutoriálu:

  • Regular-Expressions.info: bohaté znalosti o regexu ve formě článků a konzultací.
  • Regex Cheatsheet z RegExLib.com: užitečný cheatsheet, který vám pomůže udržet všechny různé speciální postavy rovně.
  • RegExLib.com: bezplatné úložiště regulárních výrazů, které můžete kopírovat a upravovat podle svých potřeb.

Jedním z nejlepších způsobů, jak se naučit psát regulární výrazy, je začít psát. Následující online nástroje vám umožní to udělat, když porovnáte svůj vlastní regulární výraz s blokem vlastního textu za běhu, takže můžete zjistit, jak formulovat regulární výrazy, které fungují:

  • RegExr: tagline říká vše: „Naučte se, budujte a testujte RegEx.“
  • Regex Pal: vytvořte vzor regexu a poté na něj otestujte řetězce, abyste se ujistili, že dělá přesně to, co chcete.
  • Regex 101: ne všechny implementace regulárních výrazů jsou vytvořeny stejně. Pomocí tohoto nástroje můžete testovat řetězce na regulárním vzorci a doladit chování na základě programovacího jazyka, ve kterém budete vzor implementovat. Podporovány jsou PHP, JavaScript, Python a Erlang.

O regexu bylo napsáno poměrně málo textů, ale tři vynikají jako nejlepší ve třídě. Pokud opravdu chcete ovládat regex, některý z těchto tří textů vás povede dlouhou cestou:

  • Kuchařka regulárních výrazů: Podrobná řešení v osmi programovacích jazycích (2012) od Goyvaerts a Levithan
  • Představujeme regulární výrazy (2012) od Michaela Fitzgeralda
  • Mastering Regulární výrazy (2006) od Jeffrey E F Friedl.

souhrn

Regulární výrazy jsou jazykově nezávislý nástroj používaný počítačovými programátory k vytváření logických vzorců. Tyto vzory pak mohou být použity k identifikaci řetězců textu, které odpovídají vzoru. Implementace Regex jsou hojné a regex podporovány nejmodernějšími programovacími jazyky a jsou dostupné ve vyhledávacích nástrojích zabudovaných do mnoha textových editorů. Začínáme s regexem může být složité, ale zvládnutí regexu je nezbytným krokem ve vývoji jakéhokoli počítačového programátora.

Další čtení a zdroje

Máme více průvodců, výukových programů a infografik týkajících se počítačů a kódování:

  • Programovací prostředky Bash: začněte s nejdůležitějším shellem příkazového řádku Unixu.
  • Sed Úvod a zdroje: editor streamů je skvělý nástroj pro používání a učení regulárních výrazů.
  • Awk Resources: Dozvíte se vše o sesterském nástroji Awk.

Konečný seznam nástrojů pro webmastery A-Z

Sed a Awk a Bash jsou jen součástí velké kolekce nástrojů, které umožňují správcům systémů spravovat operační systémy. Konečný seznam nástrojů pro webmastery A-Z vám poskytne spoustu pomoci při provádění vaší práce.

Konečný seznam nástrojů pro webmastery A-Z
Konečný seznam nástrojů pro webmastery A-Z

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map