Hva er et vanlig uttrykk?
Regex, eller vanlig uttrykk, er et mønster som samsvarer med merkingen som programmerere bruk for å søke etter bestemte mønstre i teksten. Vanlige uttrykk kan søke etter omtrent hva som helst, avhengig av hvordan du strukturerer dem; de brukes overalt av programmerere fordi de er uvurderlige for å hjelpe datamaskiner med å sortere data raskt og filtrere ut tull som ellers kan forårsake feil.
Regulære uttrykk har en tendens til å se skummelt ut, spesielt for ikke-programmerere. Bare se på dette:
[a-zA-Z0-9 _. + -] + @ [a-zA-Z0-9 _-] + \. [a-zA-Z0-9 _.-] +
Realistisk sett er det faktisk ikke så ille; at man samsvarer med e-postadresser. Som du ser, kan uttrykk deles opp i individuelle tegn, som alle forteller programmet hva de skal se etter.
Regulære uttrykk er nesten universelle. Den samme generalen syntaks gjelder på tvers av alle språk med bare små variasjoner her og der. Denne guiden inneholder eksempler fra både Python og JavaScript, så vel som vanlig gammel regex. Hvis du jobber med et annet språk, ikke bekymre deg. Nesten alt vil også gjelde for ditt valgte språk.
Regex Basics
Teknisk sett er det ikke mange ting som ikke kan betraktes som vanlige uttrykk, fordi bokstavelige tekststrenger er veldig enkle. Hvis du bruker 'abcde' som et vanlig uttrykk, vil programmeringsspråket søke etter den nøyaktige strengen.
Den første mer dynamiske matchende karakteren å se på er '.' karakter. I denne sammenheng er punkttegnet et jokertegn. Hvis du søker med det, vil programmet returnere alle tegn det finner som en kamp.
Så hva om du vil se etter en bokstavelig prikk? Det er ikke vanskelig heller. Når du vil bruke en bokstavelig periode, legg til en tilbakeslag før den, slik: '\.'
Backslash-tegn
Backslash spiller mange flere roller her, skjønt. De fleste av de store regex-tegnene inkluderer tilbakeslag.
Se på noen eksempler:
- \ d: Tall fra 0 til 9
- \ w: "Word Characters" bokstaver, sifre og understreking
- \ s: tegn i mellomrom, inkludert faner, nye linjer og vanlige mellomrom
Hvis du bruker store bokstaver i stedet for noen av disse, får du det motsatte. For eksempel gir '\ D' deg alt annet enn sifre.
Klasser
De tilbakeslagstegn er gode, men de er fortsatt stive. Vanligvis vil du ønske å matche bokstaver, tall eller noen spesialtegn.
Plasser tegnene du vil ha sammen i et par firkantede parenteser [], og programmet ditt vil matche noen av dem. Dette kalles en regex-klasse.
[abcd1234]
Ovennevnte eksempel er fremdeles ineffektivt. I stedet kan du bruke en bindestrek for å spesifisere et område; for eksempel alle små bokstaver:
[a-z]
Du kan også liste opp områder. Uttrykket nedenfor samsvarer med alle bokstaver og sifre:
[a-zA-Z0-9]
Hvis du skal inkludere bindestrek i settet ditt med tegn, kan du ta det på slutten for å forhindre at det blir evaluert. Det fungerer også med andre spesialtegn.
[a-zA-Z0-9 _. + -]
Som med tilbakeslagstegnene, kan du også få det omvendte resultatet her. Plasser et '^' i begynnelsen av timen for å ekskludere dem fra resultatene dine. Dette ekskluderer sifre og flere spesialtegn fra resultatene:
[^0-9_+.-]
Grupper
Grupper bruker et par parenteser for å skille uttrykket ditt fra hverandre. De grupperer data, slik at programmet ditt kan målrette og bruke det. Når et program striper http://' fra en nettadresse, bruker den regex-grupper for å oppnå det. Regex lar det målrette seg mot visse kriterier, og gruppene lar det skille seksjoner ut.
Grupper lar deg også velge mellom ett eller annet mønster. De bruker en enkelt '|' å fungere som "eller" i uttrykket. Uttrykket nedenfor vil samsvare med noen av disse: .com, .org, .net, .edu eller .gov.
\. (com | org | net | edu | gov)
Kvantifiserere
Kvantifiserere er akkurat slik de høres ut som. De forteller uttrykket mengden av en karakter du leter etter. Dette er de tilgjengelige kvantifiseringsmidlene:
- *: Null eller mer
- +: En eller flere
- ?: Null eller en
- {3}: Beløpet i parentes
Plasser noen av disse kvantifiseringsmidlene på slutten av tegnet eller klassen du vil spesifisere mengden av. Dette eksemplet ser etter sju-sifrede standardtelefonnumre:
\ d {3} [. * -] \ d {3} [. * -] \ d {4}
Ankere og grenser
Med vanlige uttrykk kan du søke etter mønstre basert på deres plassering i en tekststreng eller rundt et ord.
Dette er de viktigste alternativene dine:
- ^: Begynnelsen på en streng
- $: Slutten på en streng
- \ b: Ordgrense (begynnelsen eller slutten av et ord)
Hvis du bare vil finne strenger som begynner med en bokstav, kan du prøve:
^ [a-zA-Z]
Si at du bare vil finne ordet "det", ikke ord som inneholder bokstavene I og T; det er der du vil bruke ordgrenser.
\ b (i | I) t \ b
Siste tanker
Regulære uttrykk kan spare deg for massevis av hodepine når du programmerer. Tenk deg å prøve å skrive logikk for å oppnå noen av eksemplene i denne artikkelen. Det ville være et forferdelig rot. Når du blir komfortabel med dem, vil du sannsynligvis finne deg i å virkelig nyte kraften og fleksibiliteten til regex.