Začnite z Regexom: Redni izrazi olajšajo

Razkritje: Vaša podpora pomaga pri vzdrževanju spletnega mesta! Za nekatere storitve, ki jih priporočamo na tej strani, zaslužimo naročnino.


Navadni izraz, kratki regex ali regexp je zaporedje črk in simbolov, ki določa logični vzorec. Niz besedila se lahko nato primerja z vzorcem, da se ugotovijo nizi, ki ustrezajo logičnemu vzorcu, ki ga določa regex. Na podlagi te primerjave se lahko s pomočjo regularnih izrazov prepoznajo nizi besedila, ki ustrezajo posebnim zahtevam, ali pa potrdijo, da strune ustrezajo zahtevanemu vzorcu.

Če se vam ta razlaga regex zdi nekoliko abstraktna, bo morda razmislek o nekaj običajnih uporabah regex-a pomagal razjasniti njihovo uporabnost. Regex se ves čas uporabljajo v računalniškem programiranju. Na primer, tukaj je nekaj običajnih uporab za regex:

  • Če želite preveriti, ali je e-poštni naslov, vnešen v spletni obrazec, pravilno oblikovan e-poštni naslov.
  • Prepoznati vse datoteke v računalniškem sistemu, ki se končajo z določeno pripono datoteke.
  • Če želite preveriti URL-je, ki jih zahteva spletni strežnik, in izvesti preusmeritve, če URL-ji ustrezajo vzorcu ponovnega izražanja.

Pomembno je razumeti, da je regex logičen sistem za opisovanje vzorcev in ne jezika. Vendar pa je regex uporabljen v mnogih različnih programskih jezikih in ga je mogoče uporabiti tudi za iskanje po besedilu v številnih urejevalcih besedil.

Zgodovina Regexa

Regex je bil zasnovan kot teoretično računalniško načelo, ko ga je leta 1956 ustvaril matematik Stephen Cole Kleene. Sprva je bil regex izključno teoretičen. Vendar je bil leta 1968 prvič uporabljen v računalniški aplikaciji, ko ga je Ken Thompson vključil v urejevalnik besedil QED. Thompson ni bil sam pri sprejetju regexa. Približno ob istem času je Douglas T Ross v prevajalnik vključil regex za leksikalno analizo.

Kmalu so sledile te prve izvedbe programa regex. V zgodnjih sedemdesetih letih prejšnjega stoletja so v urejevalnik besedil Unix dodali logične vzorce regex, ed. Kmalu zatem se je vgrajen razseževalnik regex vstavil v ed kot samostojen pripomoček Unix, imenovan grep. V tistem trenutku je bilo le vprašanje časa, kdaj je bila podpora za regex vključena v številne pripomočke in aplikacije Unix, vključno z vi, lex, sed, Awk, expr, Emacs in še več.

Ko se je regex znašel v različnih vogalih operacijskega sistema Unix, se je uveljavil. Vendar je bilo še prostora za izboljšave. Tako se je originalna sintaksa regex, ki jo je razvil Kleene, izboljšala v osemdesetih letih prejšnjega stoletja, ko so Perlu dodali podporo razširjenih vzorcev regexov na podlagi razširjene knjižnice regex, ki jo je napisal Henry Spencer. Toda tudi po dodajanju regexa na Perl Spencer se je ideja še naprej širila in poznejša in naprednejša iteracija njegove knjižnice je bila vgrajena v programski jezik Tcl – in ta implementacija se je sčasoma prebila v odmevne sodobne projekte upravljanja informacij kot je PostgreSQL.

V vseh 80. letih prejšnjega stoletja regex ni bil nikoli standardiziran. Vendar se je to spremenilo leta 1992, ko je bil regex standardiziran v POSIX.2. Danes regex podpira veliko različnih programskih jezikov in urejevalnikov besedil. Večina sodobnih implementacij je združljiva s sistemom POSIX, vendar se na splošno na standard POSIX razširijo na različne načine, ki se razlikujejo od ene do druge izvedbe. Kot rezultat, medtem ko se osnovni vzorci za ponovno izražanje običajno ujemajo od ene do druge izvedbe, se lahko napredni vzorci precej razlikujejo glede na okolje, v katerem se uporabljajo.

Kako deluje Regex

Navadni izraz je kombinacija dveh vrst znakov: dobesednih in posebnih znakov. V kombinaciji ti znaki definirajo logični vzorec. Niz besedila lahko primerjate s tem vzorcem in preverite, ali ustrezajo vzorcu, ki ga določa izraz.

Dobesedni liki se predstavljajo. To pomeni, da dobesedna črka a predstavlja črko a, dobesedna številka 1 pa cifro 1. Vendar pa regex ni zelo dragocen, če je omejen na dobesedne znake. Posebni znaki so tisti, ki naredijo regex uporaben.

Posebni znaki imajo logični pomen v vzorcu regex. Na primer, oglejmo piko. Pika ali točka se uporablja za predstavljanje katerega koli znaka. Torej, .a bi se ujemala s katerim koli zaporedjem dveh znakov, v katerem je bil drugi znak dobesedna črka a. To pomeni, da bi se ba, 1a, -a, aa in črka, pred katero je prazen prostor, ujemali z vzorcem ponovnega izražanja..

Pika ni edini poseben znak v regexu. Obstaja približno ducat posebnih znakov, ki jih je mogoče kombinirati z literali za opisovanje zapletenih logičnih vzorcev. Oglejmo si dva primera, kako se dobesedni in posebni znaki kombinirajo za definiranje kompleksnih izrazov:

  • Če bi se želeli prepričati, da je niz besedila e-poštni naslov, ga lahko preizkusite glede na ta vzorec vnovičnega izraza: ^ [A-Z0-9 ._% + -] [zaščiten e-poštni naslov] [A-Z0-9.-] +. [AZ] {2,} $.
  • Za skeniranje imen datotek in zajem vseh, ki se je končalo s pripono .php datoteke, lahko uporabite naslednji regex: ^. *. Php $.

Če ste novi v regexu, so ti vzorci verjetno precej zmedeni. Če želite razumeti, kako delujejo ti vzorci, morate razumeti, kaj pomenijo vsi posebni znaki.

Posebni znaki Regex

Medtem ko se vsaka izvedba programa v nekaterih pogledih nekoliko razlikuje, na splošno vsi obravnavajo te posebne znake enako, z nekaj izjemami.

  • : Znak nagnjene poševnice se uporablja za izhod iz drugih posebnih znakov. Če želite ubežati drugemu znaku, kot je pika, tako da bo interpretiran kot dobesedni znak, lahko to storite tako, da piko predhodite s poševno črto: .
  • ^: Nalepka se uporablja za označevanje začetnega položaja v nizu. Regex ^ a bi se ujemal s katerim koli nizom, ki se začne z dobesedno črko a.
  • $: Znak dolarja se uporablja za ujemanje končnega položaja v nizu. Regex a $ bi se ujemal s katerim koli nizom, ki se konča z dobesedno črko a.
  • .: Pika ali točka se ujema s katerim koli znakom, ki ni nov (n) znak. Regex 1.3 bi se ujemal s katerim koli nizom z dobesednim, katerim koli znakom in dobesednim trem, kot so 123, 1a3 in celo 1 3.
  • |: Navpična cev je izbira in se lahko razlaga kot samostojna beseda ali. Torej se lahko regex a | b bere kot “a ali b” in se ujema s črko a ali črko b.
  • *: Zvezdica se uporablja za ujemanje prejšnjega znaka nič ali večkrat. Torej bi se regex. * Sploh ujemal s katerim koli nizom, če ne bi vseboval znaka nove vrstice.
  • ?: Vprašanje se bo prejšnjemu znaku ujemalo nič ali enkrat, vendar ne več. Regex 123? bi se torej ujemalo z 12 ali 123.
  • +: Simbol plus se en ali večkrat ujema s predhodnim znakom, vendar se mora znak pojaviti vsaj enkrat, za razliko od zvezdice, ki ustreza prejšnjemu znaku nič ali večkrat. Torej bi se regex a * b + ujemal z ab in b, ne pa a, ker se mora b uporabiti vsaj enkrat zaradi uporabe znaka plus.
  • […]: oklepaji ustrezajo enemu znaku v oklepaju. Lahko pa se doda takšna oznaka, kot je ta [^ …], da se ujema s katerim koli znakom, ki ni v oklepaju. Posebnim znakom v oklepaju vam ni treba ubežati, razlagali jih bodo kot dobesedne znake. V oklepajih se pogosto uporabljajo za določanje obsegov znakov. Na primer, regex [0-9] bi se ujemal s katero koli enoštevilko in [A-Z] bi se ujemal s katero koli veliko črko v angleški abecedi. Končno lahko oklepaji vsebujejo znake, ločene z vejicami. Torej bi se [a, g] ujemala s katero od črk a in g.
  • {…}: Curly naramnice, imenovane izrecne kvantifikatorje, določijo, kolikokrat se mora pojaviti prejšnji znak. Regex ab {2} c lahko izpolni samo abbc. Za ustvarjanje razpona sprejemljivih vrednosti lahko dodamo drugo številko. Torej, ab {2,3} c bi se ujemal ali abbc ali abbbc in [0-9] {1,2} bi se ujemal s katero koli eno ali dvomestno številko.
  • (…): Parentheza se uporablja za označevanje podbepresije znotraj večjega izraza. Torej bi se regex (abc) * ujemal s katerim koli nizom, sestavljenim iz črk abc, vendar se morajo vse tri črke pojaviti skupaj in v tem vrstnem redu.

Sami po sebi so posebni liki nekoliko uporabni. Možne vzorce je mogoče opisati v kombinaciji teh posebnih znakov z literali. Seznam posebnih znakov zgoraj vključuje nekaj preprostih kombinacij posebnih znakov. Oglejmo si še enkrat regularni izraz za prepoznavanje datotek PHP, da vidimo, kako ti znaki delujejo skupaj.

Tukaj je zadevni regeks: ^. *. Php $. Vzemimo ga po en kos.

  • ^ označuje začetek preskusnega niza, ki bi bil v tem primeru ime datoteke.
  • .* delajte skupaj, da pokažete, da lahko ime datoteke vsebuje poljubno število poljubnih znakov, vendar nobenih vrstic.
  • .php se začne z bežnim znakom, ki zagotavlja, da se pika razlaga kot dobesedni in ne kot poseben znak. Nato dobesedne črke php kažejo, da želimo po imenu datoteke preveriti kombinacijo pike in črke php.
  • $ označuje, da se mora .php končnica prikazati na koncu iskalnega niza, da se lahko ujema.

Kot lahko vidite, v samo devetih znakih ta regex ustvari logični vzorec, ki lahko preseje kompleksna imena datotek in natančno določi tista, ki se končajo s pripono .php datoteke.

Unicode in Regex

Ena od težav, ki se lahko pojavijo pri regexu, je, kako ravnati z jeziki, ki uporabljajo znake, ki niso del sodobne angleške abecede. Unicode je standard za kodiranje, ki poskuša rešiti to težavo s kodiranjem številk v numerične vrednosti.

Nekatere izvedbe regex podpirajo uporabo Unicode-a za izdelavo vzorcev regex, kar pomeni, da lahko ustvarite vzorce, ki bodo lahko preizkušali strune, ki vsebujejo znake iz različnih jezikov. Poleg tega je mogoče Unicode izraze kombinirati z dobesednimi črkami in posebnimi znaki, da se ustvarijo zapleteni vzorci z regularnimi izrazi.

Nekateri najpogostejši vzorci vnovičnega regeksa Unicode vključujejo:

  • p {L}: ujema se s katero koli črko v katerem koli jeziku. Torej, p {L} {2,4} se ujema s katerim koli zaporedjem črk med dvema in štirimi znaki.
  • p {Z}: ujema z vsemi presledki.
  • p {N}: ujema z numeričnimi znaki.
  • p {P}: ujema se z ločili.

Obstaja veliko dodatnih lastnosti Unicode, ki jih lahko uporabite pri ustvarjanju regularnih izrazov, pod pogojem, da implementacija, s katero delate, podpira regex Unicode. Če želite izvedeti več, preberite Unicode Regular Expressions na Regular-Expressions.info.

Viri

V tem primerju smo zajeli ravno toliko, da vam omogočimo osnovni občutek, kako deluje regex in kako ga lahko uporabite za določanje določenih bitov kode in besedila v urejevalniku besedil ali za prepoznavanje in preverjanje podatkov v računalniški aplikaciji. Če želite izvedeti več, si oglejte naslednje vire, ki so nudili bolj napredne informacije kot tiste, ki smo jih obravnavali v tej kratki vadnici:

  • Regular-Expressions.info: veliko znanja o regexu v obliki člankov in vaj.
  • Regex Cheatsheet z RegExLib.com: uporaben cheatsheet, ki vam bo pomagal ohraniti vse različne posebne znake naravnost.
  • RegExLib.com: brezplačno shranjevanje regularnih izrazov, ki ga lahko kopirate in spremenite glede na vaše potrebe.

Eden najboljših načinov za obisk pisanja rednih izrazov je, da jih začnete pisati. Naslednja spletna orodja vam bodo omogočala, da primerjate svoje regularno izražanje z blokom besedila po meri na poti, da boste lahko ugotovili, kako oblikovati regularne izraze, ki delujejo:

  • RegExr: slogan pove vse: “Naučite se, zgradite in preizkusite RegEx.”
  • Regex Pal: ustvarite vzorec regex in nato preizkusite nize v njem, da se prepričate, da naredi točno tisto, kar želite..
  • Regex 101: niso vse izvedbe programa regex enake. S tem orodjem preizkusite nize glede na vzorec vnovičnega izraza in natančno nastavite vedenje glede na programski jezik, v katerem boste vzorec izvajali. Podprti so PHP, JavaScript, Python in Erlang.

O regexu je bilo napisanih kar nekaj besedil, tri pa izstopajo kot najboljša v razredu. Če resnično želite obvladati regex, bo katero od teh treh besedil daleč na poti do vas:

  • Kuharica z rednimi izrazi: podrobne rešitve v osmih programskih jezikih (2012) Goyvaerts in Levithan
  • Predstavljamo regularne izraze (2012) Michaela Fitzgeralda
  • Obvladovanje pravilnih izrazov (2006) Jeffrey E F Friedl.

Povzetek

Redni izrazi so jezikovno neodvisno orodje, ki ga računalniški programerji uporabljajo za izdelavo logičnih vzorcev. Te vzorce lahko nato uporabite za identifikacijo struktur besedila, ki ustrezajo vzorcu. Regexovih izvedb je veliko, regex pa podpira večina sodobnih programskih jezikov in je na voljo v iskalnih orodjih, vgrajenih v številne urejevalnike besedil. Začeti z regexom je lahko težavno, vendar je obvladovanje regexa nujen korak pri razvoju katerega koli računalniškega programerja.

Nadaljnje branje in viri

Na voljo imamo več vodnikov, vadnic in infografik, povezanih z računalniki in kodiranjem:

  • Viri za programiranje Bash-a: začnite z najpomembnejšo lupino ukazne vrstice Unix.
  • Sed Uvod in viri: urejevalnik tokov je odlično orodje za uporabo in učenje pravilnih izrazov.
  • Viri Awk: izvedejte vse o sestrskem orodju Awk.

Vrhunski seznam orodij za spletne skrbnike A-Z

Sed in Awk in Bash sta le del velike zbirke orodij, ki sistemskim administratorjem omogočajo upravljanje operacijskih sistemov. Končni seznam orodij za spletne skrbnike A-Z vam bo pomagal pri vašem delu.

Vrhunski seznam orodij za spletne skrbnike A-Z
Vrhunski seznam orodij za spletne skrbnike 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