
REGULJÄRA UTTRYCK
(regular expressions)
Det mest grundläggande reguljära uttrycket består av ett enda bokstav t.ex. a. Det kommer att matcha den första förekomsten av tecknet i strängen. Om strängen är "Hans är en apelsin", kommer det att matcha det första a:et efter bokstaven H.
Detta reguljära uttryck kan matcha den andra a:et i "apelsin" också. Det kommer bara göra det när du säger till regex motorn för att börja söka igenom strängen efter den första matchen. I en textredigerare kan du göra det genom att använda sin "Sök nästa"eller"Sök framåt"-funktion. I ett programmeringsspråk, finns det oftast en separat funktion som du kan använda för att fortsätta söka igenom strängen efter den föregående matchningen.
Det finns tretton tecken med speciella betydelser:
[ hakparentes (öppnande)
] hakparentes (stängande)
\ omvänt snedstreck eller backslash
^ caret
$ dollartecknet
. punkt
| lodrätt streck, vertikalstreck eller pipa
? frågetecknet
* asterisken eller en stjärna
? frågetecken
+ plustecknet
( parantes (öppnande)
) parantes (stängande)
Dessa specialtecken kallas ofta för "metatecken".
Om du vill använda någon av dessa tecken som en bokstavligt tecken i ett reguljärt uttryck, måste du föregå dem med ett omvänt snedstreck (backslash). Om du vill matcha "1+1=2" är den korrekta regex "1\+1=2". Annars kommer plustecknet har en speciell innebörd.
\" |
matchar |
" |
\$ |
matchar |
$ |
\* |
matchar |
* |
Parenteser använd för att gruppera uttryck om vi vill att parenteser skall matcha måste vi använda tecknet \( utryck\).
* |
Matcha 0 gånger eller mer |
+ |
Matcha 1 gång eller mer |
? |
Matcha 0 eller 1 gång |
{n} |
Matcha exakt 'n' gånger |
{n,} |
Matcha minst 'n' gånger |
{n,m} |
Matcha minst 'n' gånger och högst 'm' gånger |
? eller . |
Matchar ett enstaka tecken |
[xxx] eller [x-x] |
Matchar tecken eller en räcka tecken |
^sträng |
Matchar i början av en rad |
sträng$ |
Matchar i slutet av en rad |
HAKPARANTESER
[ och ] används för att matcha något av flera möjliga tecken. [ab]* matchar a, b, aa, bb, ab, ba, osv.
Matchning av en hel serie av tecken.
| [a-zåäö] |
Matchar alla tecken i alfabetet |
| [a-zåäöA-XÅÄÖ] |
Matchar stora och små bokstäver i alfabetet. |
| [0-9,]* |
Matchar strängar av siffror och kommatecken |
Innanför hakparanteserna blir de speciella tecknen , . *, + precis vad de är, dock ej hakparantesen själv.
| [*+()\[\]] |
Matchar *, +, (, ), [, ] |
Om det första tecknet i en hakparantes är ^, så blir betydelsen av hakparantesen den omvända. Parentesen matchar då alla tecken som inte finns uppräknade i parentesen. Om den inte står först förlorar den sin speciella betydelse.
| [^ ]* |
Matchar allt fram till nästa mellanslag |
| [\^] |
Matchar ^ |
| [^^]* |
Matchar allt fram till nästa ^ |
| "[^"]*" |
Matchar citerade strängar ( kan också skrivas ".*?" ) |
| <[^>]*> |
Matchar HTML-taggar (kan också skrivas <.*?>) |
MÖNSTER (PATTERNS)
| \t |
tabb (HT, TAB) |
| \s |
matchar tomrumstecken (tabbar, mellanslag, ny rad, mm) |
| \S |
matchar alla tecken som inte \s matchar |
| \n |
ny rad (newline (LF, NL)) |
| \r |
returmatning (return) |
| \w |
matchar ordtecken, tecken som räknas som en del av ett ord |
| \W |
matchar alla tecken som \w inte matchar |
| \d |
matchar en siffra (0-9) |
| \D |
matchar alla tecken som inte är en siffra |
| $x |
matchar innehållet i variabeln $x |
| \$x |
matchar $x |
| \d$x\d |
matchar innehållet i variabeln $x omgivet av siffror |
| \b |
matchar ordgräns (\bbanan\b) |
| \B |
matchar allt som inte är en ordgräns |
| \A |
matchar början av strängen |
| \Z |
matchar slutet av strängen |
| \G |
matchar där den senaste matchningen slutade |
(Observera att alla dessa koder bara matchar ett tecken vardera. Om vi vill matcha ett helt ord måste vi skriva \w+)
Matcha en viss possition
Några fler speciella variabler användbara vid sökning:
| $+ |
$LAST_PAREN_MATCH |
Innehåller det senast matchade deluttrycket. |
| $& |
$MATCH |
Innehåller hela den matchade strängen. |
| $` |
$PREMATCH |
Innehåller allting före den matchade strängen. |
| $' |
$POSTMATCH |
Innehåller allting efter den matchade strängen. |
| ${^POSTMATCH} |
- |
Detta liknar $'($POSTMATCH) förutom att den inte har några prestanda förluster som är förknippad med den variabeln, och garanterar att returnera ett fastställt värde när mönstret kompilerades eller kördes med /p modifieraren. |
| $^N |
$LAST_SUBMATCH_RESULT |
Främst används denna inuti (?{...}) block för att pröva nyligen matchad text. Till exempel, för att effektivt hitta text till en variabel (i tillägg till $ 1, $ 2 osv), byt (...) med ... |
Misc
| \033 |
oktalt tecken, matchar tecknet med det oktala värdet 33 |
| \x1b |
hexadecimalt tecken, matchar tecknet med det hexadecimala värdet 1b |
| \f |
form feed (FF) |
| \a |
alarm (bell) (BEL) |
| \e |
escape (tänk troff) (ESC) |
| \c[ |
control char |
| \l |
lowercase next char (tänk vi) |
| \u |
uppercase next char (think vi) |
| \L |
lowercase till \E (think vi) |
| \U |
uppercase till \E (think vi) |
| \E |
end case modification (think vi) |
| \Q |
quote (disable) pattern metacharacters till \E |
OPPERATORER FÖR REGULJÄRA UTTRYCK
SYNTAX:
=~ binder en sträng uttryck för ett mönster match, substitution, eller transkription (löst kallas översättning)
eller
!~
Praktiskt exempel på matchning
$string =~ /regular expression/expression modifier
eller
string =~ operator/sök/ersätt_med/modifierare;
Eller för att inte matcha
string !~ operator/sök/ersätt_med/modifierare;
$sentence innehåller en massa ord och vi letar efter "Hello"
$sentence =~ /Hello/;
ERSÄTTNINGS-OPPERATORN (s)
Ersäter "Korv" med "Bulle" (variabeln $x innehåller en massa ord och meningar)
$x =~ s/Korv/Bulle/;
Raderar en HTML-tagg
$x =~ s/<.*?>//;
Ersätter å med å
$x =~ s/å/å/;
Ersätter datumformen "95-12-14" med "951214"
$x =~ s/^(\d\d)-(\d\d)-(\d\d)/$1$2$3/;
Den sista operatorn är översättnings-operatorn som skrivs 'tr' (translation) eller 'y' (yank). Den används för att översätta tecknen, ett åt gången, och är egentligen mycket enklare än s- och m- operatorerna. När vi utför en översättning ersätts varje tecken i sökmönstret med tecknet som står på motsvarande plats i ersättningsmönstret. Operatorn returnerar antalet tecken som matchade sökmönstret. Precis som innanför hakparanteserna kan vi använda tecknet '-' för att ange en serie an tecken.
Gör om stora- till små bokstäver
$x =~ tr/A-ZÅÄÖ/a-zåäö/;
Eftersom 'tr' bara översätter tecken för tecken så är modifierare så som *, +, ?, mm meningslösa. När vi använder dessa tecken i 'tr' så tolkas de alltid bokstavligt. Det enda speciella tecknet är '-' som indikerar att vi menar en serie som skall översättas samt '\' som kodar speciella tecken (-, \ och /).
Om ersättningslistan är kortare än söklistan så förlängs den automatiskt genom att det sista tecknet upprepas så många gånger som behövs.
Ersätt "0" med "x "samt alla andra siffror med "y"
$x =~ tr/0-9/xy/;
Om ersättningslistan är helt tom så görs inga ersättningar. Eftersom översättnings-operatorn returnerar antalet tecken i strängen som matchar över sättningsmönstret kan vi använda detta för att räkna antalet tecken av en viss typ.
Räkna antalet siffror i $x:
$antal = ($x =~ tr/0-9//);
Räkna antalet ben i manniskokroppen
$antal = ($manniskokroppen =~ tr/b//);
MODIFIERARE (längst bak i regex)
| i |
Gör sökningen case-insensitive |
| g |
Global matchning |
| m |
Om strängen har ett rad-brytningstecken kommer inte metatecknen ~ och $ att fungera korrekt. Denna modifierare talar om för Perl att behandla en rad som flera rader. |
| s |
Tecknet . matchar alla tecken utom en ny rad. Denna modifierare behandlar denna rad som en rad, som tillåter . att matcha ett radbrytnings tecken. |
| x |
Tillåter mellanslag (whitespace) i uttrycket |
Exempel: Leta efter Hello (case-incesitive)
$sentence =~ /"Hello"/i;
MODIFIERARE FÖR 'tr'
| c |
Invertera söksträngen (complement) |
| d |
Radera tecken som inte matchar (delete) |
| s |
Kläm ihop ersatta tecken (squash) |
Exempel:
Ersätter alla tecken utom de alfabetiska med mellanslag
$string =~ tr/A_Za-zÅÄÖåäö/ /c;
Radera alla siffror
$string =~ tr/0-9//d;
Radera alla tecken utom de alfabetiska
$string =~ tr/A-Za-zÅÄÖåäö//cd;
Ersätt alla följder av icke-alfabetiska tecken med ett mellanslag
$string =~ tr/A_Za-zÅÄÖåäö/ /cs;
METATECKEN
| \ |
Talar om för Perl att acceptera följande tecken så som det är, detta tar bort ev andra betydelser som tecknet kan ha. |
| ~ |
Matchar början av strängen, om inte /m används för att modifiera uttrycket. |
| . |
Matchar alla tecken utom radbrytnings tecken finns i strängen, så tillvida inte /s används för att modifiera uttycket. |
| $ |
Matchar slutet av strängen, om inte /m används för att modifiera uttrycket. |
| ^ |
Matchar början av strängen |
| =~ |
Träff |
| !~ |
Ingen träff |
| | |
Utrycker variation. Detta betyder att uttrycket kommer att söka efter multipla mönster i samma sträng. (Den bitvisa eller-operatorn.) |
| () |
Grupperar uttryck för att i variation och åter referering. |
| [] |
Letar efter ett set av tecken. |
Gruppera
$string =~ s/(exp1)(exp2)(exp3)/$2/
Accessen till de grupperade uttrycken (paranteser) sker genom exp1=$1, exp2=$2 och exp3=$3
Länkar
http://perldoc.perl.org/perlvar.html
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm
http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlre.html
"regular-expressions", Hans E Andersson: 2005-09-05 15:09:13, ändrad: 2012-08-15 02:12:56