ett RE matchar omm någon av grenarna matchar
en gren matchar omm alla delar matchar (i rätt ordning)
Exempel: uttrycket “abc” består av en gren som består av delarna “a”, “b” och “c” och matchar alla strängar som innehåller ett “a” omedelbart följt av ett “b” omedelbart följt av ett “c”.
algoritmen för att matcha ett RE bygger på trial-and-error
Exempel:
echo '{"key": "value"}' | grep -o '".*":'
" matchar första tecknet; .* matchar resten av raden; " misslyckas
algoritmen låter * backa ett steg; då matchar sista " också
men inte :; algoritmen backar tills alla fyra delarna matchar
enstaka tecken utom metatecken
^ $ . [ * \ | ( ) ? + {
en “.”
en “\” följt av valfritt tecken
en mängd inom []
ett specialuttryck inom []
en referens - d.v.s. en “\” följt av en siffra
ett RE inom ()
^ början av rad eller sträng $ slut av rad eller sträng . godtyckligt tecken [] mängder och specialuttryck - se nedan * noll eller fler av föregående atom \ metaomvandlare?
| grenavgränsare () gruppering ? noll eller en av föregående atom + en eller fler av föregående atom {i} exakt i st. av föregående atom {i,} minst i st. av föregående atom {i,j} minst i men högst j st. av föregående atom
\n,\t,\r, newline, tab, carriage-return etc. {,j} högst j st. av föregående atom \< \> början resp. slut av ord \b \B tom sträng vid ordgräns resp. inuti ett ord \w \W samma som [_0-9a-zA-Z] resp. [^_0-9a-zA-Z] \? \+ \| istället för ? + | i BRE
bakåtreferens
a([bc])\1d (matchar “abbd” och “accd” men inte “abcd”)
ersättning
s/a([bc])d/A\1D/ (ersätter “abd” med “AbD” och “acd” med “AcD”)
teckenklass [[: :]]
alnum digit punct alpha graph space blank lower upper cntrl print xdigit
ekvivalensklass [[= =]]
echo Citroner á 2:- | LC_COLLATE=en_US.UTF-8 grep "[ [=a=] ]" echo Citroner á 2:- | grep [^[=c=]]
kollationeringselement [[. .]]
echo Ålborg | LC_COLLATE=da_DK.UTF-8 egrep '[Ä-[.Aa.]]'
non-greedy matches: ".*?"
non-backtracking: ".*+"
non-capturing: (?:...)
named captures: (?<name>...)
extended escape sequences
etc.
man perlre