Začíname s Regex: Regulárne výrazy uľahčujú používanie

zverejnenie: Vaša podpora pomáha udržiavať web v prevádzke! Za niektoré zo služieb, ktoré odporúčame na tejto stránke, získavame poplatok za sprostredkovanie.


Regulárny výraz, regulárny alebo skrátene regulárny, je postupnosť písmen a symbolov, ktorá definuje logický vzor. Reťazce textu sa potom môžu porovnávať so vzorom, aby sa identifikovali reťazce, ktoré sa zhodujú s logickým vzorom definovaným regexom. Na základe tohto porovnania možno regex použiť na identifikáciu reťazcov textu, ktoré spĺňajú špecifické požiadavky, alebo na overenie, či reťazce spĺňajú požadovaný vzor..

Ak sa zdá, že toto vysvetlenie regexu je trochu abstraktné, možno bude potrebné objasniť ich užitočnosť po prečítaní niekoľkých bežných použití regulárneho výrazu. Regex sa používajú stále v počítačovom programovaní. Tu je niekoľko bežných použití regexu:

  • Overenie, či e-mailová adresa zadaná do webového formulára je správne formulovaná e-mailová adresa.
  • Identifikovať všetky súbory v počítačovom systéme, ktoré končia určitou príponou.
  • Ak chcete skontrolovať adresy URL požadované od webového servera a vykonať presmerovania, ak adresy URL spĺňajú regulárny vzor.

Je dôležité pochopiť, že regex je logický systém na opis vzorov a nie jazyk. Regex bol však implementovaný v mnohých rôznych programovacích jazykoch a môže sa tiež použiť na vyhľadávanie textu v mnohých textových editoroch.

História Regex

Regex bol koncipovaný ako teoretický princíp počítačovej vedy, keď ho v roku 1956 vytvoril matematik Stephen Cole Kleene. Spočiatku bol regex čisto teoretický. V roku 1968 sa však prvýkrát použil v počítačovej aplikácii, keď ho Ken Thompson začlenil do textového editora QED. Thompson nebol sám pri prijímaní regexu. Približne v rovnakom čase Douglas T Ross začlenil regex pre lexikálnu analýzu do kompilátora.

Tieto prvé implementácie regulárnych výrazov boli čoskoro sledované. Na začiatku 70. rokov boli do textového editora Unixu, ed. Krátko nato bol syntaktický analyzátor regulárneho kódu zabudovaný do edu zvinutý ako samostatný unixový nástroj zvaný grep. V tom okamihu to bolo len otázkou času, kým bola podpora regexu začlenená do mnohých unixových utilít a aplikácií vrátane vi, lex, sed, Awk, expr, Emacs a ďalších..

V čase, keď si Regex našiel cestu do rôznych kútov operačného systému Unix, bol zakorenený. Stále však existoval priestor na zlepšenie. Pôvodná syntax regexu vyvinutá Kleenom sa tak zlepšila v 80. rokoch, keď sa do Perlu pridala podpora rozšírených vzorov regexu na základe rozšírenej regulárnej knižnice napísanej Henrym Spencerom. Avšak aj po pridaní regónu do Perl Spencer pokračoval v rozširovaní myšlienky a neskoršia a pokročilejšia iterácia jeho knižnice bola zabudovaná do programovacieho jazyka Tcl – a táto implementácia sa napokon dostala na špičkové projekty moderného riadenia informácií. ako PostgreSQL.

Počas 80. rokov nebol regex nikdy štandardizovaný. To sa však zmenilo v roku 1992, keď bol regex štandardizovaný v POSIX.2. Dnes je regex podporovaný mnohými rôznymi programovacími jazykmi a textovými editormi. Väčšina moderných implementácií je kompatibilná s POSIX, ale vo všeobecnosti sa rozširujú o štandard POSIX rôznymi spôsobmi, ktoré sa líšia od jednej implementácie k ďalšej. Výsledkom je, že zatiaľ čo základné vzory regulárnych výrazov sa vo všeobecnosti zhodujú od jednej implementácie k druhej, pokročilé vzorce sa môžu značne líšiť v závislosti od prostredia, v ktorom sa uplatňujú..

Ako Regex funguje

Regulárny výraz je kombináciou dvoch typov znakov: literálov a špeciálnych znakov. V kombinácii tieto znaky definujú logický vzor. Textové reťazce sa môžu porovnávať s týmto vzorom, aby sa zistilo, či sa zhodujú so vzorom definovaným výrazom.

Doslovné znaky predstavujú samy seba. To znamená, že doslovné písmeno a predstavuje písmeno a a doslovné číslo 1 predstavuje číslicu 1. Regex však nie je veľmi cenný, ak je obmedzený na doslovné znaky. Vďaka špeciálnym znakom je regex užitočný.

Špeciálne znaky majú logický význam v regulárnom vzore. Napríklad sa pozrime na bodku. Bodka alebo bodka sa používa na označenie ľubovoľného znaku. Takže by .a zodpovedalo akejkoľvek dvojmiestnej postupnosti, v ktorej by bol druhý znak doslovným písmenom a. To znamená, že ba, 1a, -a, aa a písmeno, ktorému predchádza prázdne miesto, by sa všetky zhodovali s týmto regulárnym vzorom.

Bodka nie je jediným špeciálnym znakom v regexe. Existuje asi tucet špeciálnych postáv, ktoré možno kombinovať s literálmi, aby opísali zložité logické vzorce. Pozrime sa na dva príklady kombinovania literálov a špeciálnych postáv na definovanie zložitých výrazov:

  • Ak ste sa chceli ubezpečiť, že reťazec textu je e-mailová adresa, môžete ho otestovať pomocou tohto vzorového vzoru: ^ [A-Z0-9 ._% + -] [email chránený] [A-Z0-9.-] +. [AZ] {2} $.
  • Na skenovanie názvov súborov a zachytenie všetkých súborov, ktoré skončili príponou .php, môžete použiť nasledujúci regex: ^. *. Php $.

Ak ste novým v regexe, tieto vzorce sú pravdepodobne dosť mätúce. Aby ste pochopili, ako tieto vzorce fungujú, musíte pochopiť, čo znamenajú všetky špeciálne znaky.

Regex Špeciálne znaky

Aj keď sa každá implementácia regexu v niektorých ohľadoch líši, vo všeobecnosti sa všetci zaobchádzajú s týmito špeciálnymi znakmi rovnako, až na pár výnimiek.

  • : Znak lomítka sa používa na únik z iných špeciálnych znakov. Ak teda chcete uniknúť inému znaku, napríklad bodke, aby bol interpretovaný ako doslovný znak, môžete tak urobiť tak, že pred bodku odošlete spätné lomítko ako je táto: .
  • ^: Uptick sa používa na označenie počiatočnej pozície v reťazci. Regex ^ a by zodpovedal akémukoľvek reťazcu začínajúcemu písmenom a.
  • $: Znak dolára sa používa na vyrovnanie koncovej pozície v reťazci. Regulárny znak $ by zodpovedal každému reťazcu končiacmu písmenom a.
  • .: Bodka alebo bodka zodpovedá ľubovoľnému znaku, ktorý nie je znakom nového riadku (n). Regex 1.3 by zodpovedal akémukoľvek reťazcu s doslovným, akýmkoľvek znakom a doslovným trom, ako sú 123, 1a3 a dokonca 1 3.
  • Vertikálna rúra je operátorom voľby a dá sa interpretovať ako stand-in pre slovo alebo. Regex a | b by sa teda mohol čítať ako „a alebo b“ a zodpovedal by buď písmenu a alebo písmenu b.
  • *: Hviezdička sa používa na vyrovnanie predchádzajúceho alebo nulového znaku. Regex. * By teda vyhovoval všetkým reťazcom, pokiaľ neobsahoval znak nového riadku.
  • ?: Otazník sa vyrovná predchádzajúcemu znaku nula alebo raz, ale už nie. Regex 123? preto by zodpovedali buď 12 alebo 123.
  • +: Symbol plus sa zhoduje s predchádzajúcim znakom raz alebo viackrát, ale znak sa musí objaviť aspoň raz, na rozdiel od hviezdičky, ktorá sa zhoduje s predchádzajúcim znakom nula alebo viackrát. Regex a * b + by sa teda zhodoval s abab, ale nie s, pretože b sa musí objaviť aspoň raz kvôli použitiu symbolu plus.
  • […]: Zátvorky zodpovedajú jednému znaku v zátvorkách. Alebo je možné pridať uptick, ako je tento [^ …], aby zodpovedal všetkým znakom, ktoré nie sú obsiahnuté v zátvorkách. V zátvorkách nemusíte unikať špeciálne znaky, budú interpretované ako literály. Zátvorky sa často používajú na definovanie rozsahov znakov. Napríklad regulárny výraz [0-9] by zodpovedal akejkoľvek jednej číslici a [A-Z] by zodpovedal veľkým písmenám v anglickej abecede. V závorkách môžu byť použité znaky oddelené čiarkami. Takže [a, g] by zodpovedalo jednému z písmen a a g.
  • {…}: Zložené zátvorky, nazývané explicitné kvantifikátory, určujú, koľkokrát sa musí predchádzajúci znak objaviť. Regex ab {2} c môže splniť iba abbc. Druhé číslo môže byť pridané na vytvorenie rozsahu prijateľných hodnôt. Takže ab {2,3} c by zodpovedalo buď abbc alebo abbbc a [0-9] {1,2} by zodpovedalo jednému alebo dvom číslicovému číslu.
  • (…): Zátvorky sa používajú na označenie podvýživy v rámci väčšieho výrazu. Regex (abc) * by sa teda zhodoval s akýmkoľvek reťazcom tvoreným písmenami abc, ale všetky tri písmená sa musia objaviť spolu a v tomto poradí.

Samotné špeciálne postavy sú trochu užitočné. V kombinácii týchto špeciálnych postáv a literálov je možné opísať silné vzory. Zoznam vyššie uvedených špeciálnych znakov obsahuje niekoľko jednoduchých kombinácií špeciálnych znakov. Pozrime sa ďalej na regulárny súbor na identifikáciu súborov PHP, aby sme videli, ako tieto znaky spolupracujú.

Tu je uvedený regulárny výraz: ^. *. Php $. Zoberme si to naraz.

  • ^ označuje začiatok skúšobného reťazca, ktorým by v tomto prípade bol názov súboru.
  • .* spoločne naznačujú, že názov súboru môže obsahovať ľubovoľný počet ľubovoľných znakov, nie však nové riadky.
  • .php začína znakom escape, ktorý zabezpečuje, že bodka sa interpretuje skôr ako doslovný ako špeciálny znak. Ďalej doslovné písmená php označujú, že za názvom súboru chceme skontrolovať kombináciu bodky a písmen php.
  • $ označuje, že prípona .php sa musí zobraziť na konci vyhľadávacieho reťazca, aby sa mohla zhodovať.

Ako vidíte, regex dokáže vytvoriť logický vzorec, ktorý dokáže preosiať zložité názvy súborov a určiť tie, ktoré končia príponou .php..

Unicode a Regex

Jedným z problémov, ktorý sa môže pri práci s regexom objaviť, je spôsob, ako sa vysporiadať s jazykmi, ktoré používajú znaky, ktoré nie sú súčasťou modernej anglickej abecedy. Unicode je kódovací štandard, ktorý sa pokúša vyriešiť tento problém kódovaním číslic do číselných hodnôt.

Niektoré implementácie regulárnych výrazov podporujú použitie Unicode na vytváranie vzorov regulárnych výrazov, čo znamená, že je možné vytvoriť vzory regulárnych výrazov, ktoré budú schopné testovať reťazce obsahujúce znaky z rôznych jazykov. Okrem toho môžu byť výrazy Unicode kombinované s literálmi a špeciálnymi znakmi, aby sa vytvorili zložité vzory regulárnych výrazov.

Medzi najbežnejšie vzory regulárneho kódu Unicode patria:

  • p {L}: Zhoduje sa s ktorýmkoľvek písmenom v akomkoľvek jazyku. Takže p {L} {2,4} zodpovedá ľubovoľnej postupnosti písmen s dĺžkou od dvoch do štyroch znakov.
  • p {Z}: Zhoduje všetky medzery.
  • p {N}: Zhoda číselných znakov.
  • p {P}: Zhoduje sa s interpunkčnými znamienkami.

Existuje mnoho ďalších vlastností Unicode, ktoré môžete použiť pri vytváraní regulárnych výrazov, za predpokladu, že implementácia, s ktorou pracujete, podporuje regulárny Unicode. Ak sa chcete dozvedieť viac, prečítajte si regulárne výrazy Unicode na Regular-Expressions.info.

zdroje

V tomto primeri sme sa venovali len dosť, aby sme vám poskytli základný dojem o tom, ako regex funguje a ako ho môžete použiť na určenie konkrétnych bitov kódu a textu v textovom editore alebo na identifikáciu a overenie údajov v počítačovom aplikácii. Ak sa chcete dozvedieť viac, pozrite si nasledujúce zdroje, ktoré poskytli podrobnejšie informácie, ako sú uvedené v tomto krátkom návode:

  • Regular-Expressions.info: množstvo vedomostí o regexe vo forme článkov a návodov.
  • Regex Cheatsheet z RegExLib.com: užitočný cheatsheet, ktorý vám pomôže udržať všetky rôzne špeciálne postavy rovno.
  • RegExLib.com: bezplatný archív regulárnych výrazov, ktoré môžete kopírovať a upravovať podľa svojich potrieb.

Jedným z najlepších spôsobov, ako sa naučiť písať regulárne výrazy, je začať ich písať. Nasledujúce online nástroje vám to umožnia urobiť porovnaním vlastného regulárneho výrazu s blokom vlastného textu za chodu, takže môžete zistiť, ako formulovať regulárne výrazy, ktoré fungujú:

  • RegExr: slogan hovorí všetko: „Naučte sa, budujte a testujte RegEx.“
  • Regex Pal: vytvorte regulárny vzor a potom naň otestujte reťazce, aby ste sa uistili, že robí presne to, čo chcete.
  • Regex 101: Nie všetky implementácie regulárnych výrazov sú vytvorené rovnako. Pomocou tohto nástroja môžete testovať reťazce na regulárnom vzore a doladiť správanie na základe programovacieho jazyka, v ktorom implementujete vzor. Podporované sú PHP, JavaScript, Python a Erlang.

O regexe bolo napísaných pomerne málo textov, ale tri vynikajú ako najlepšie v triede. Ak naozaj chcete ovládať regex, ktorýkoľvek z týchto troch textov vás posunie k veľkej ceste:

  • Kuchárka regulárnych výrazov: podrobné riešenia v ôsmich programovacích jazykoch (2012) od Goyvaerts a Levithan
  • Predstavujeme pravidelné výrazy (2012) od Michaela Fitzgeralda
  • Mastering Regulárne výrazy (2006), autor Jeffrey E F Friedl.

zhrnutie

Regulárne výrazy sú jazykovo nezávislým nástrojom, ktorý používajú počítačoví programátori na vytváranie logických vzorcov. Tieto vzory sa potom môžu použiť na identifikáciu reťazcov textu, ktoré zodpovedajú vzoru. Implementácie Regexu sú hojné a regulárne sú podporované najmodernejšími programovacími jazykmi a sú dostupné vo vyhľadávacích nástrojoch zabudovaných do mnohých textových editorov. Začíname s regexom môže byť zložité, ale zvládnutie regexu je nevyhnutným krokom vo vývoji ktoréhokoľvek počítačového programátora.

Ďalšie čítanie a zdroje

Máme viac príručiek, návodov a infografík týkajúcich sa počítačov a kódovania:

  • Bash Programming Resources: začnite s najdôležitejším shellom príkazového riadku Unix.
  • Úvod a zdroje Sed: editor streamu je vynikajúci nástroj na používanie a učenie regulárnych výrazov.
  • Zdroje Awk: Dozviete sa všetko o sesterskom nástroji Awk.

Konečný zoznam Nástrojov správcu webu A-Z

Sed a Awk a Bash sú iba súčasťou rozsiahlej zbierky nástrojov, ktoré správcom systému umožňujú spravovať operačné systémy. The Ultimate List of Webmaster Tools A-Z vám poskytne veľa pomoci pri vykonávaní vašej práce.

Konečný zoznam Nástrojov správcu webu A-Z
Konečný zoznam Nástrojov správcu webu 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