Reguljära uttryck
Inomdatavetenskapärreguljära uttryck(engelska:regular expressions,ofta förkortatregexellerregexp) en notation för att beskriva vissamängderavsträngar.Ett uttryck består av en sträng som följer särskildasyntaxregler.Reguljära uttryck används i mångatexteditorerochprogramspråkför sökning och textmanipulation.
Syntax
[redigera|redigera wikitext]Den exakta syntaxen för reguljära uttryck kan variera. Men det finns några grundläggande begrepp som är gemensamma för många tillämpningar.
I sin enklaste form är ett reguljärt uttryck ett enskilt tecken som matchar en delsträng som utgör själva tecknet. Exempelvis, det reguljära uttrycket "a" matchar tecknet "a" i ordet "katt". Med hjälp av operatorer kan man bygga ihop uttryck som matchar komplicerade mönster i strängar.
De grundläggande operationerna är:
- Konkateneringbeskrivs av en sekvens av deluttryck, exempelvis matchar sekvensen "hur" bokstaven "h" omedelbart följt av "u" omedelbart följt av "r", dvs strängen "hur".
- Alternativbeskrivs av ett lodrätt streck,
|
.Det används för att matcha ett av flera alternativ. Uttryckethund|katt
matchar både strängen "hund" och strängen "katt". - Upprepninganvänds för att matcha ett uttryck som upprepas 0 eller flera gånger. Det markeras med en asterisk. Uttrycket
go*gle
matchar en oändlig mängd av strängar: "ggle", "gogle", "google", "gooogle", o.s.v. - Grupperingav uttryck kan göras med parenteser. Det används t.ex. för att ange alternativ, såsom
G(äv|ef)le
som matchar "Gävle" och "Gefle".
Dessutom förekommer i de flesta implementationer även:
- Teckenklassermatchar ett av de tecken som beskrivs inom hakparenteserna. Till exempel matchar
[btk]ok
bok, tok och kok. Man kan även beskriva klassen med ett intervall, till exempel[a-z]
eller[a-z1-9@.]
.
Det finns kortversioner, eller stenografiska versioner, av bestämda teckenklasser; till exempel står\d
för[0-9]
,det vill säga vilken siffra som helst inom spannet 0-9. - Jokerteckensom anges med tecknet
.
.Matchar vilket tecken som helst. - Fler varianter avupprepning.Till exempel
?
för att ange antingen 0 eller 1 upprepning och+
används för att ange 1 eller flera upprepningar. - Ankare / avgränsareför markering av var ord eller strängar börjar och slutar. Till exempel används
\b
som avgränsare för ord.
Exempel
[redigera|redigera wikitext]Anta att vi vill hitta ett datum som är inbäddat i en text:
- "Anita skulle besöka Alfred klockan 19:20 2012-12-21 för att äta middag."
Vi kan då matcha datumet med uttrycket:
[0-9]+-[0-9]+-[0-9]+
eller, i kortversion:\d+-\d+-\d+
Men det skulle även matcha exempelvis 0-0-0 eller 1234-493456-8645, som inte är korrekta datum. För att matcha ett korrekt datum, begränsat till 1900- och 2000-talet, kan man använda exempelvis:
\b(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12]\d|3[01])\b
Reguljära uttryck i skriptspråk
[redigera|redigera wikitext]SkriptspråkenPerl,EcmascriptochTclhar reguljära uttryck semantiskt inbyggda i själva språket, medan de allra flesta programspråk, verktyg och miljöer har någon form av stöd för användandet av reguljära uttryck implementerat.