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 (\b banan\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