Reguljära uttryck

teckensekvens som anger ett sökmönster i text

Inom datavetenskap är reguljära uttryck (engelska: regular expressions, ofta förkortat regex eller regexp) en notation för att beskriva vissa mängder av strängar. Ett uttryck består av en sträng som följer särskilda syntaxregler. Reguljära uttryck används i många texteditorer och programspråk för sökning och textmanipulation.

Syntax redigera

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:

  • Konkatenering beskrivs 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".
  • Alternativ beskrivs av ett lodrätt streck, |. Det används för att matcha ett av flera alternativ. Uttrycket hund|katt matchar både strängen "hund" och strängen "katt".
  • Upprepning anvä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.
  • Gruppering av 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:

  • Teckenklasser matchar 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.
  • Jokertecken som anges med tecknet .. Matchar vilket tecken som helst.
  • Fler varianter av upprepning. Till exempel ? för att ange antingen 0 eller 1 upprepning och + används för att ange 1 eller flera upprepningar.
  • Ankare / avgränsare fö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

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

Skriptspråken Perl, Ecmascript och Tcl har 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.

Externa länkar redigera