
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