Reguljära uttryck
Från Rilpedia
Ett reguljärt uttryck (eller "ett regex"/"en regexp") är ett sätt för mönsterpassning som används i flera programspråk och datorkommandon. Det handlar alltså inte om vilka "vanliga" uttryck som helst.
Regexps används när man i en viss textmassa vill hitta ett visst ord eller mönster av tecken och eventuellt byta ut det. Ett vanligt användningsområde och åskådligt exempel är kommandot grep(1) i Unix, som letar efter ett mönster i en fil.
Mer avancerade och fullständiga exempel är den primitiva texteditorn ed och strömeditorn sed. En alternativ variant av regexpar ingår i programspråket Perl. Olika varianter av regexpar är tillgängliga från Pike, Java, Elisp, Python och som subrutinbibliotek i övriga programspråk. Det finns tre typer av regex-motorer: DFA, Traditional NFA och POSIX NFA. Dessa hittar inte alltid samma träffar, och gör det dessutom olika snabbt. För en jämförelse mellan olika implementationer, se http://www.bagley.org/~doug/shootout/bench/regexmatch/
Vanligt förekommande funktioner
foo ordet foo . vilket tecken som helst a* noll eller flera av bokstaven a .* noll eller flera av vilket tecken som helst a+ ett eller flera av bokstaven a a? noll eller ett av bokstaven a (foo)+ en eller flera förekomster av strängen "foo"
foo|bar strängen "foo" eller "bar" [ ab ] bokstaven a eller bokstaven b [ a-e ] någon av bokstäverna a, b, c, d eller e [ ^a ] något tecken som inte är bokstaven a [ -a ] något av tecknet minus eller bokstaven a ^a bokstaven a först på en rad a$ bokstaven a sist på en rad \[ tecknet vänsterklammer
Alla dessa funktioner ingår inte i alla implementationer, och i vissa fall ska t ex + och ( föregås av \.
Specialare
För en del tecken krävs specialhantering. För att passa in ett ] (höger hakparantes), måste detta skrivas först i uttrycket som listar en mängd tecken, eftersom tecknet annars skulle markera slutet på mängden. [ ]a-z ]
passar in på någon av de gemenena bokstäverna a till och med z plus på höger hakparantes.
Knepigt är det att passa in ett minustecken (-
), ofta går det att skriva tecknet sist i mängden, [ ]a-z- ]
, men ibland fungerar det bättre att skriva tre minustecken i rad, [ ]a-z--- ]
, dvs från och med minus till och med minus.
Mer läsning
- En tutorial: http://www.regular-expressions.info/
- En beskrivning på engelska av reguljära uttryck hittar du här: [regex]
- "Bibeln" på detta område är Jeffrey E. F. Friedls bok/Mastering Regular Expressions från O'Reilly.
- En svensk inledning av Pär Leijonhufvud, KI Consulting, http://www.ki.se/org/dk/kompendier/regex.html