Mis on regulaarne väljend?
Regex või regulaarsed väljendid, on muster, mis sobib märgistusega programmeerijad kasutage tekstist teatud mustrite otsimiseks. Regulaaravaldised võivad otsida kõike, olenevalt sellest, kuidas te neid struktureerite; programmeerijad kasutavad neid kõikjal, sest need on hindamatud, et aidata arvutitel andmeid kiiresti sortida ja lollusi välja filtreerida, mis muidu võivad põhjustada vigu.
Regulaarsed väljendid kipuvad tunduma hirmutavad, eriti mitte programmeerijate jaoks. Vaadake lihtsalt seda:
[a-zA-Z0-9 _. + -] + @ [a-zA-Z0-9 _-] + \. [a-zA-Z0-9 _.-] +
Realistlikult pole see tegelikult nii hull; see sobib e-posti aadressidega. Nagu näete, saab väljendeid jagada üksikuteks märkideks, mis kõik ütlevad programmile, mida otsida.
Regulaarsed väljendid on peaaegu universaalsed. Sama kindral süntaks kehtib kõigis keeltes, siin ja seal on vaid väikesed erinevused. See juhend sisaldab nii Pythoni kui ka JavaScripti näiteid ja tavalist vana regexi. Kui töötate mõne muu keelega, ärge muretsege. Peaaegu kõik kehtib ka teie valitud keele kohta.
Regexi põhitõed
Tehniliselt pole palju asju, mida ei saaks pidada regulaaravaldisteks, sest sõna otseses mõttes tekstistringid on tõesti lihtsad. Kui peaksite regulaaravaldisena kasutama 'abcde', otsiks programmeerimiskeel seda täpset stringi.
Esimene dünaamilisem sobituv märk, millele pilgu heita, on '.' iseloomu. Selles kontekstis on punktmärk metamärk. Kui otsite sellega, tagastab teie programm vastetena kõik leitud märgid.
Mis siis, kui soovite otsida sõnasõnalist punkti? Ka see pole raske. Kui soovite kasutada sõnasõnalist perioodi, lisage selle ette tagaskriips, näiteks järgmine: '\.'
Tagasi kaldkriipsuga tähemärgid
Tagasilöögil on siin aga veel palju rolle. Enamik peamisi regexi märke sisaldab tagasilööki.
Vaadake mõnda näidet:
- \ d: numbrid 0 kuni 9
- \ w: "Sõnamärgid" tähed, numbrid ja alakriipsud
- \ s: tühimärgid, sh vahelehed, uued read ja tavalised tühikud
Kui kasutate selle asemel suurtähte, saate vastupidi. Näiteks annab \ \ D teile kõike muud kui numbreid.
Klassid
The tagasilöögimärgid on head, kuid on siiski kuidagi jäigad. Üldiselt soovite sobitada tähed, numbrid või mõne erimärgi.
Pange tähemärgid, mille soovite sobitada, nurksulgudesse [[]) ja teie programm sobib ühega neist. Seda nimetatakse regex klassiks.
[abcd1234]
Ülaltoodud näide on endiselt ebaefektiivne. Selle asemel võite vahemiku määramiseks kasutada kriipsu; näiteks kõik väikesed tähed:
[a-z]
Saate loetleda ka vahemikke. Allolev väljend sobib kõigi tähtede ja numbritega:
[a-zA-Z0-9]
Kui kavatsete kriipsu lisada oma märkide komplekti, kleepige see lõpus kinni, et vältida selle hindamist. See töötab ka teiste eritegelastega.
[a-zA-Z0-9 _. + -]
Sarnaselt tagasilöögimärkidega saate ka siin pöördvõrdelise tulemuse. Pange oma klassi algusesse '^', et see oma tulemustest välja jätta. See jätab tulemustest välja numbrid ja mitu erimärki:
[^0-9_+.-]
Grupid
Grupid kasutavad sulgude komplekti, et tükeldada teie väljend. Nad rühmitavad andmeid, võimaldades teie programmil neid sihtida ja kasutada. Kui programm eemaldab ' http://' Veebiaadressilt kasutab ta selleks regex-rühmi. Regex võimaldab sellel sihtida teatud kriteeriume ja rühmad lasevad sellel jaotised eraldada.
Grupid võimaldavad teil valida ka ühe või teise mustri vahel. Nad kasutavad ühte "|" toimida väljendis "või". Allpool olev väljend sobib mis tahes neist: .com, .org, .net, .edu või .gov.
\. (com | org | net | edu | gov)
Kvantorid
Kvantorid on täpselt sellised, nagu need kõlavad. Nad ütlevad väljendile otsitava tegelase koguse. Need on saadaolevad kvantorid:
- *: Null või rohkem
- +: Üks või mitu
- ?: Null või üks
- {3}: sulgudes olev summa
Asetage ükskõik milline neist kvantoritest märgi või klassi lõppu, mille suuruse soovite määrata. See näide otsib standardseid seitsmekohaseid telefoninumbreid:
\ d {3} [. * -] \ d {3} [. * -] \ d {4}
Ankrud ja piirid
Regulaaravaldised võimaldavad teil mustreid otsida nende positsiooni põhjal tekstireas või sõna ümber.
Need on teie peamised võimalused:
- ^: Stringi algus
- $: Stringi lõpp
- \ b: sõna piir (sõna algus või lõpp)
Kui soovite leida ainult tähega algavaid stringe, võite proovida järgmist.
^ [a-zA-Z]
Oletame, et soovite leida lihtsalt sõna "see", mitte sõnu, mis sisaldavad tähti I ja T; seal kasutaksite sõnapiire.
\ b (i | I) t \ b
Lõpumõtted
Regulaarsed väljendid võivad programmeerimisel säästa tonni peavalu. Kujutage ette, et proovite kirjutada loogikat, et täita mõni selles artiklis toodud näide. See oleks kohutav segadus. Kui olete nendega rahul, avastate end tõenäoliselt regexi jõudu ja paindlikkust nautimas.