Byrjaðu með Regex: Reglulegar tjáningar gera það auðvelt

Birting: Stuðningur þinn hjálpar til við að halda vefnum í gangi! Við þénum tilvísunargjald fyrir sumar þjónusturnar sem við mælum með á þessari síðu.


Regluleg tjáning, regex eða regexp í stuttu máli, er röð bókstafa og tákna sem skilgreinir rökrétt mynstur. Síðan er hægt að bera saman strengi texta við mynstrið til að bera kennsl á strengi sem passa við rökrétt mynstur skilgreint af regex. Á grundvelli þessa samanburðar er hægt að nota regex til að bera kennsl á strengi texta sem uppfylla sérstakar kröfur eða til að staðfesta að strengir uppfylla krafist mynstur.

Ef þessi skýring á regex virðist svolítið óhlutbundin, ef til vill að líta á nokkrar algengar notkun regex mun hjálpa til við að skýra notagildi þeirra. Regex eru notuð allan tímann við tölvuforritun. Hér eru til dæmis nokkur algeng notkun fyrir regex:

  • Til að staðfesta að netfang sem slegið er inn á vefform er rétt samsett netfang.
  • Til að bera kennsl á allar skrár í tölvukerfi sem enda með ákveðinni skráarlengingu.
  • Til að athuga vefslóðir sem beðið er um af vefþjóninum og framkvæma tilvísanir ef slóðirnar uppfylla regex mynstur.

Það er mikilvægt að skilja að regex er rökrétt kerfi til að lýsa munstrum en ekki tungumál. Hins vegar hefur regex verið hrint í framkvæmd á mörgum mismunandi forritunarmálum og er einnig hægt að nota það til að leita í texta í mörgum ritstjórum.

Saga Regex

Regex var hugsað sem fræðilegt tölvunarfræði meginregla þegar það var stofnað árið 1956 af stærðfræðingnum Stephen Cole Kleene. Upphaflega var regex eingöngu fræðilegt. Árið 1968 var það hins vegar notað í tölvuforrit í fyrsta skipti þegar Ken Thompson felldi það í QED textaritilinn. Thompson var ekki einn um að taka upp regex. Um svipað leyti felldi Douglas T Ross regex til lexískrar greiningar í þýðanda.

Þessum fyrstu regex útfærslum var fljótlega fylgt. Snemma á áttunda áratugnum var regex rökrétt mynstur bætt við Unix texta ritstjóra, ritstj. Stuttu síðar var regex-þáttarinn, sem var innbyggður í ed, rúllaður sem sjálfstætt Unix gagnsemi sem kallast grep. Á þeim tímapunkti var það aðeins tímaspursmál áður en stuðningur við regex var felldur inn í margar Unix tólar og forrit þar á meðal vi, lex, sed, Awk, expr, Emacs og fleira.

Um það leyti sem regex hafði fundið leið inn í ýmis horn í Unix stýrikerfinu var það fest. Samt var samt svigrúm til úrbóta. Svo að upprunalega regex-setningafræðin, sem Kleene þróaði, var bætt á níunda áratugnum þegar stuðningur við stækkað regex-mynstur var bætt við Perl á grundvelli stækkaðs regex-bókasafns skrifað af Henry Spencer. En jafnvel eftir að regex var bætt við Perl hélt Spencer áfram að útvíkka hugmyndina og seinna og þróaðri endurtekning bókasafns hans var byggð inn í Tcl forritunarmálið – og sú innleiðing lagði leið að lokum í sniðin nútíma upplýsingastjórnunarverkefni eins og PostgreSQL.

Allan níunda áratuginn var regex aldrei staðlað. Það breyttist þó árið 1992 þegar regex var staðlað í POSIX.2. Í dag er regex stutt af mörgum mismunandi forritunarmálum og textaritlum. Flestar nútíma útfærslur eru POSIX samhæfar en stækka yfirleitt POSIX staðalinn á ýmsan hátt sem er breytilegur frá einni framkvæmd til annarrar. Afleiðingin er sú að þó grunnregex-mynstur passi yfirleitt frá einni framkvæmd til annarrar geta háþróað mynstur verið mjög mismunandi eftir því umhverfi sem þeim er beitt í.

Hvernig Regex virkar

Regluleg tjáning er sambland af tveimur gerðum persóna: bókstafir og sértákn. Í samsetningu skilgreina þessir stafir rökrétt mynstur. Hægt er að bera saman strengi texta við þetta mynstur til að sjá hvort þeir passa við mynstrið sem skilgreint er af tjáningunni.

Bókstafstafir tákna sjálfa sig. Það þýðir að bókstafur a táknar bókstafinn a og bókstafstafur 1 táknar töluna 1. Regex er þó ekki mjög dýrmætur ef hún er takmörkuð við bókstafstafi. Sérstafir eru það sem gerir regex gagnlegt.

Sérstafir hafa rökrétta merkingu innan regex-mynsturs. Lítum til dæmis á punktinn. Punkturinn, eða tímabilið, er notaður til að tákna hvaða staf sem er. Svo .a myndi passa við hvaða tveggja stafa röð sem seinni stafurinn var bókstafurinn a. Það þýðir að ba, 1a, -a, aa, og stafurinn sem er á undan tómu rými, passuðu allir við það regex mynstur.

Punkturinn er ekki eina sértáknið í regex. Það eru í kringum tugi sérsagna sem hægt er að sameina bókstöfum til að lýsa flóknum rökréttum mynstrum. Við skulum líta á tvö dæmi um hvernig bókstafir og sértákn eru sameinuð til að skilgreina flókin tjáningu:

  • Ef þú vildir ganga úr skugga um að textastrengur væri tölvupóstfang gætirðu prófað það á móti þessu regex mynstri: ^ [A-Z0-9 ._% + -] [email protection] [A-Z0-9.-] +. [AZ] {2,} $.
  • Til að skanna skráanöfn og ná hvaða sem endaði með .php skráarlengingunni gætirðu notað eftirfarandi regex: ^. *. Php $.

Ef þú ert nýr í regex eru þessi munur líklega frekar ruglingslegur. Til að skilja hvernig þessi mynstur virka þarftu að skilja hvað allir sértáknin þýða.

Sérstök Regex

Þó að hver regex-útfærsla sé að einhverju leyti svolítið í sumum tilfellum, fara þau alla jafna fram við þessa sértákn með fáum undantekningum.

  • : Afturfallsstafurinn er notaður til að komast undan öðrum sértáknum. Þannig að ef þú vilt komast undan annarri persónu, svo sem punkti, svo að það verði túlkað sem bókstafstákn, þá gætirðu gert það með því að fara á undan punktinum með svigi eins og þessum: .
  • ^: Uptick er notað til að gefa til kynna upphafsstöðu í streng. Regex ^ a myndi passa við hvaða streng sem byrjar á bókstafstafnum a.
  • $: Dollaramerki er notað til að passa við lokastöðuna í streng. Regex a $ myndi passa við hvaða streng sem lýkur með bókstafstafnum a.
  • .: Punkturinn eða tímabilið samsvarar öðrum staf en nýja línunni (n) stafnum. Regex 1.3 myndi passa við hvaða streng sem er með bókstaflegum, hvaða staf og bókstaflega þremur eins og 123, 1a3 og jafnvel 1 3.
  • |: Lóðrétta pípan er valinn rekstraraðili og má túlka sem stand-in fyrir orðið eða. Svo að regex a | b mætti ​​lesa sem „a eða b“ og passaði annað hvort við bókstafinn a eða bókstafinn b.
  • *: Stjörnumerki er notuð til að passa við stafinn á undan núll eða oftar. Svo að regex. * Myndi passa við alla strengi svo framarlega sem það innihélt ekki nýjan staf.
  • ?: Spurningarmerkið mun passa við stafinn á undan núll eða einu sinni, en ekki meira. Regex 123? myndi því passa annað hvort 12 eða 123.
  • +: Plús tákn passar stafinn á undan einum eða fleiri sinnum, en stafurinn verður að birtast að minnsta kosti einu sinni, ólíkt stjörnu sem samsvarar stafnum á undan núllinu eða oftar. Svo að regex a * b + passar við ab og b, en ekki a vegna þess að b verður að birtast að minnsta kosti einu sinni vegna notkunar plúsartáknsins.
  • […]: Sviga samsvarar einum staf sem er innan sviga. Eða, þá er hægt að bæta við aukaspil, eins og þessum [^ …], til að passa við hvaða staf sem er ekki innan sviga. Þú þarft ekki að flýja sérstaka persónur innan sviga, þær verða túlkaðar sem bókstafstrúarmenn. Sviga er oft notuð til að skilgreina svið stafanna. Til dæmis myndi regex [0-9] passa við sérhverja stafi og [A-Z] passa við alla hástafi í enska stafrófinu. Að lokum geta sviga innihaldið stafir sem eru aðskilin með kommu. Svo [a, g] passaði við annan af bókstöfunum a og g.
  • {…}: Krulluð axlabönd, kölluð skýr magngreiningar, tilgreina fjölda skipta sem stafurinn á undan verður að birtast. Regex ab {2} c er aðeins hægt að uppfylla með abbc. Hægt er að bæta við annarri tölu til að búa til svið viðunandi gildi. Þannig að ab {2,3} c passar annað hvort abbc eða abbbc og [0-9] {1,2} myndi passa við eitt eða tveggja stafa tölu.
  • (…): Parenthesis er notað til að merkja framþróun innan stærri tjáningar. Þannig að regex (abc) * passar við alla strengi sem samanstendur af stafunum abc, en allir þrír stafirnir verða að birtast saman og í þeirri röð.

Sérstök persónur eru nokkuð gagnlegar. Það er í samblandi þessara sérpersóna við bókstafina sem hægt er að lýsa kröftugum munstri. Listinn yfir sértákn hér að ofan inniheldur nokkrar einfaldar sértáknasamsetningar. Við skulum líta aftur á regexið til að bera kennsl á PHP skrár til að sjá hvernig þessar persónur vinna saman.

Hér er regex sem um ræðir: ^. *. Php $. Við skulum taka það í einu.

  • ^ gefur til kynna upphaf prófstrengsins, sem í þessu tilfelli væri skráarheiti.
  • .* vinna saman að því að gefa til kynna að skráarheitið geti innihaldið hvaða fjölda stafi sem er, en engar nýlínur.
  • .php byrjar á flóttapersónu sem tryggir að punkturinn er túlkaður sem bókstaflegur frekar en sértákn. Næst, bókstafstafir php gefa til kynna að eftir nafni skjalsins viljum við athuga hvort samsetning punktur og stafirnir php séu.
  • $ gefur til kynna að .php viðbótin verður að birtast í lok leitarstrengsins til að vera samsvörun.

Eins og þú sérð tekst á aðeins níu stöfum þessari regex að búa til rökrétt mynstur sem getur sigtað í gegnum flókin skráarnöfn og bent á þau sem enda á .php skráarlengingunni.

Unicode og Regex

Eitt af vandamálunum sem geta sprottið upp við regex er hvernig á að takast á við tungumál sem nota stafi sem eru ekki hluti af nútíma enska stafrófinu. Unicode er kóðunarstaðall sem reynir að leysa þetta vandamál með því að kóða tölustafi í talnagildi.

Sumar regex útfærslur styðja notkun Unicode til að byggja upp regex mynstur, sem þýðir að hægt er að búa til regex mynstur sem geta prófað strengi sem innihalda stafi frá ýmsum tungumálum. Að auki er hægt að sameina tjáning Unicode með bókstöfum og sérstökum persónum til að byggja upp flókin regex mynstur.

Sum algengustu Unicode regex mynstur eru:

  • p {L}: Samsvarar hvaða staf sem er á hvaða tungumáli sem er. Svo, p {L} {2,4} samsvarar hvaða röð stafanna sem er á milli tveggja og fjögurra stafa.
  • p {Z}: Samsvarar öllum stafatöflum.
  • p {N}: Samsvarar tölustafir.
  • p {P}: Samsvarar greinarmerki.

Það eru margir viðbótareiginleikar Unicode sem þú getur notað þegar smíðað er reglulega, að því tilskildu að útfærslan sem þú ert að vinna með styður Unicode regex. Til að læra meira, lestu Unicode Regular Expressions á Regular-Expressions.info.

Auðlindir

Við höfum fjallað nákvæmlega um þetta í grunninn til að gefa þér grundvallar tilfinningu fyrir því hvernig regex virkar og hvernig þú getur notað það til að ákvarða tiltekna bita af kóða og texta í textaritli eða til að bera kennsl á og staðfesta gögn í tölvuforriti. Til að læra meira skaltu skoða eftirfarandi úrræði sem veittu frekari upplýsingar en það sem við höfum fjallað um í þessari stuttu kennslu:

  • Regular-Expressions.info: mikil þekking um regex í formi greina og námskeiða.
  • Regex svindlari frá RegExLib.com: gagnlegt svindlblað sem hjálpar þér að halda öllum mismunandi sérstöfunum í beinni.
  • RegExLib.com: ókeypis geymsla reglulegra tjáninga sem þú getur afritað og breytt til að henta þínum þörfum.

Ein besta leiðin til að ná tökum á ritun reglulegra tjáninga er að byrja að skrifa þau. Eftirfarandi verkfæri á netinu leyfa þér að gera einmitt þetta, bera saman sérsniðna regex við reit af sérsniðnum texta á flugu svo þú getir fundið út hvernig þú getur mótað reglulegar orðasambönd sem virka:

  • RegExr: tagline segir allt: „Lærðu, smíðaðu og prófaðu RegEx.“
  • Regex Pal: búðu til regex mynstur og prófaðu síðan strengi gegn því til að ganga úr skugga um að það geri nákvæmlega það sem þú vilt að það geri.
  • Regex 101: ekki allar regex útfærslur eru búnar til jafnar. Notaðu þetta tól til að prófa strengi gegn regex mynstri og fínstilla hegðun byggða á forritunarmálinu þar sem þú munt útfæra munstrið. PHP, JavaScript, Python og Erlang eru studd.

Allnokkrir textar hafa verið skrifaðir um regex en þrír standa sig bestir í bekknum. Ef þú vilt virkilega ná góðum tökum á regex mun einhver þessara þriggja texta ganga langt í að koma þér þangað:

  • Regular Expressions Cookbook: Ítarlegar lausnir á átta forritunarmálum (2012) eftir Goyvaerts og Levithan
  • Kynna Regular Expressions (2012) eftir Michael Fitzgerald
  • Mastering Regular Expressions (2006) eftir Jeffrey E F Friedl.

Yfirlit

Reglulegar tjáningar eru tungumálatengd tæki sem tölvuforritarar nota til að byggja upp rökrétt mynstur. Síðan er hægt að nota þessi mynstur til að bera kennsl á strengi af texta sem passa við mynstrið. Regex útfærslur eru í miklu magni og regex er studd af flestum nútímalegum forritunarmálum og eru fáanleg í leitartækjunum sem eru innbyggðir í marga ritstjóra. Að byrja með regex getur verið erfiður, en húsbóndi regex er nauðsynlegt skref í þróun hvaða tölvuforritara sem er.

Frekari upplestur og úrræði

Við höfum fleiri handbækur, námskeið og infografics sem tengjast tölvum og kóðun:

  • Bash forritunargögn: byrjaðu með mikilvægustu Unix skipanalínuskelin.
  • Sed kynning og auðlindir: straumritarinn er frábært tæki til að nota og læra reglulegar tjáningar.
  • Awk Resources: læra allt um systur tólið Awk.

Endanlegur listi yfir verkfæri vefstjóra A-Z

Sed og Awk og Bash eru aðeins hluti af stóru safni verkfæra sem gera kerfisstjóra kleift að stjórna stýrikerfum. Endanlegur listi yfir verkfæri vefstjóra A-Z mun veita þér mikla hjálp við vinnu þína.

Endanlegur listi yfir verkfæri vefstjóra A-Z
Endanlegur listi yfir verkfæri vefstjóra 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