Hvad er regulære udtryk?

+2

Datarensning med regulært udtryk

Regulære udtryk (forkortet: RegEx) er et system der blev opfundet af Stephen Cole Kleene i 1951 til at validere mønstre i skriftsprog. Et mønster er en bestemt rækkefølge af tegn. Et regulært udtryk vil kunne validere alle de input som følger et bestemt mønster. Lad os sige, at man skal lave et regulært udtryk som kan validere et telefonnummer. Her skal man overveje kravene for et gyldigt telefonnummer. Det skal bestå af otte cifre og det må ikke være andet end tal. Dette kan man lave til et regulært udtryk, så hvis inputtet ikke følger dette mønster, så vil det ikke blive valideret af udtrykket.

Regulære udtryk er et effektivt værktøj til datarensning eftersom det kan frasortere alt det data, som ikke følger det bestemte mønster. Du kan benytte nedenstående værktøj til at lave et regulært udtryk og teste det overfor et bestemt tekststykke:

Regulært udtryk:

Tekst:

Bemærk, at hvis du er ny til regulære udtryk, så er det en god ide, at læse resten af artiklen inden du prøver værktøjet, så du kan forstå hvad det gør. Et mere gennemgående værktøj kan findes ved at klikke her.

De grundlæggende principper for regulære udtryk vil blive gennemgået her.

Den nøjagtige tekst

Et regulært udtryk kan blot være en vilkårlig tekst, f.eks. zebra. Med dette regulære udtryk, så vil alle input som indeholder de præcise tegn, zebra, blive valideret.

 

Vekslen mellem to eller flere ord

Et regulært udtryk kan være to eller flere ord separeret med en lodret streg (|). Når man separerer ordene med en lodret streg betyder det at inputtet blot behøver at være ét af de vilkårlige ord. Det regulære udtryk, zebra|elefant vil validere inputtet zebra og inputtet elefant.

Man kan også sætte ord separeret med en lodret streg ind imellem parenteser for at angive at et af de vilkårlige ord kan indsættes et sted i en sætning. Det regulære udtryk, Mit yndlingsdyr er en (zebra|elefant), vil validere inputtet, Mit yndlingsdyr er en zebra, og inputtet Mit yndlingsdyr er en elefant.

 

Potentielle tegn

Et regulært udtryk kan indeholde firkantede parenteser. Tegnene imellem parenteserne kan alle erstatte et vilkårligt tegn i teksten. Dette er nyttigt for ord der ofte bliver lavet stavefejl i. Det regulære udtryk, finan[sc]iere, vil både validere finansiere (stavet med “s”) og financiere (stavet med “c”). Mange folk staver nemlig “finansiere” med “c”, hvilket er forkert.

Man kan sætte en cirkumfleks (^) foran tegnene inde i de firkantede parenteser, som gør at udtrykket vil validere alle tegn som ikke er angivet. Det regulære udtryk, [^aeiouyæøå]at vil validere alle tekster som ender med “at” og starter med tegn som ikke er a, e, i, o, u, y, æ, ø og å. Det kunne f.eks. være kat eller hat.

Man kan også benytte en bindestreg (-) for at angive alle tegn i et bestemt omfang. Det kunne f.eks. være [a-d], som angiver tegnene a, b, c og d. Det samme kan gøres med tal. [1-5] angiver tallene 1, 2, 3, 4 og 5. Bemærk at der er forskel på store og små bogstaver. For at inkludere alle bogstaver, både store og små, skal man skrive [A-Za-z].

 

Erstatningstegn

Et regulært udtryk kan indeholde et punktum (.) som angiver et ukendt tegn. Det regulære udtryk, ka..e, vil både validere kaffe og katte, eftersom de to punktummer kan være hvilke som helst tegn.

 

Tegnklasser

Der findes forskellige tegnklasser om angiver hvilke slags tegn som inputtet kan bestå af:

  • \w – Tegnet kan bestå af alle bogstaver i alfabetet, både store og små, samt alle tal fra 0 til 9. Symboler er ikke inkluderet, på nær bundstreg (_).
  • \d – Tegnet kan bestå af alle tal fra 0 til 9.
  • \s – Tegnet kan enten være et mellemrum, et linjeskift, sideskift eller en indrykning.

Derudover findes der tegnklasser som angiver hvilke tegn som inputtet ikke kan bestå af:

  • \W – Tegnet kan ikke bestå af bogstaver i alfabetet, tal fra 0 til 9, men kun symboler, på nær bundstreg (_).
  • \D – Tegnet kan ikke bestå af alle tal fra 0 til 9.
  • \S – Tegnet kan ikke bestå af et mellemrum, et linjeskift, sideskift eller en indrykning.

Bemærk at tegnklasserne kun angiver et enkelt tegn. Man kan tilføje flere af de samme tegnklasser ved siden af hinanden for at angive et længere tekstmønster. F.eks. vil udtrykket, \d\d\d\d\d\d\d\d, validere otte tal lige efter hinanden. Dette regulære udtryk kan benyttes til at validere telefonnumre.

 

Kvantifikatorer

Et regulært udtryk kan indeholde to tuborgparenteser ( {} ) som angiver bestemte kvantifikatorer. Imellem de to tuborgparenteser indsættes et tal, som angiver hvor mange af det foregående tegn eller mønster der må være.

  • \d{5} – angiver at der skal være fem tal
  • \d{1,3} – angiver at der skal være mellem 1 til 3 tal
  • Bø{4}h – angiver at der skal stå B, efterfulgt af fire ø‘er, efterfulgt af et h (Bøøøøh)

Et spørgsmålstegn (?) angiver at det forudgående tegn enten kan være der 0 eller 1 gang. Det regulære udtryk, Bygg?e, vil både validere Byge og Bygge. Man kan også sætte et helt ord ind i en parentes efterfulgt af et spørgsmålstegn for at angive at sætningen kan valideres, om ordet er med eller ej. Det regulære udtryk, Der er en (stor)? bjørn, vil både validere Der er en stor bjørn og Der er en bjørn.

En stjerne (*) angiver at det forudgående tegn enten kan være der 0, 1 eller flere gange. Det regulære udtryk, Bø*h, vil både validere Bh, Bøh, Bøøøh og Bøøøøøøøøh.

Et plustegn (+) angiver at det forudgående tegn enten kan være der 1 eller flere gange. Det regulære udtryk, Bø+h, vil både validere Bøh, Bøøøh og Bøøøøøøøøh.

 

Ankere

Man kan benytte et cirkumfleks (^) i starten af det regulære udtryk og et dollartegn ($) i slutningen af det regulære udtryk for at angive at der ikke kommer noget før og efter. Det regulære udtryk ^hunde er søde$ vil validere teksten hunde er søde, men ikke sorte hunde er søde eller hunde er søde kæledyr.

 

Skiftetegn

Regulære udtryk benytter punktum, spørgsmålstegn, stjerne, cirkumfleks, dollartegn, skråstreg, parenteser og lodrette strege til at lave bestemte mønstre. Hvis man vil benytte disse tegn i selve udtrykket, så skal man sætte en omvendt skråstreg (\) foran tegnet.

+2

Skriv et svar