&xwp; anv„nder en kombination av m†nga standarder f”r RE syntaxer. Niv†n
av funktionalitet „r f”r det mesta modellerad av ut”kade regulj„ra uttryck (ERE's)
som st”ds av UNIX egrep och awk program. Vissa f”rb„ttringar
som introducerats av POSIX, som typiskt †terfinns i UNIX ex och
vi, finns ocks† f”r det mesta i GNU programvara och har ocks† st”d.
F”ljande regler g„ller (se BNF definitioner f”r en formell definition):
Grundl„ggande tecken
abc matchar a, sedan b, sedan c.
~ . ^ $ ( ) { } [ ] ? + * |
Till exempel, 1\*2 matchar 1, sedan *,
sedan 2.
c:\\config\.sys matchar c:\config.sys.
\n ny rad ASCII 10 \t tab ASCII 9 \r vagnreturn ASCII 13 \b backspace ASCII 8 \f formfeed \e escape ASCII 27 \x07 bel ASCII 7C och C++ programmerare kommer att finna den h„r notationen familj„r. Strikt, i enlighet med POSIX, om
\x2e lades i ett ERE skulle det betyda "n†got tecken"
(ASCII tecken 0x2e „r punkt, vilket betyder n†got tecken, se senare), men det h„r
implementationen behandlar det som "matcha ett fullt stopp".
\< 'start av ord' (se senare). Tecknet efter backslash
v„ljs i allm„nhet till n†got som du inte beh”ver f”reg†, s† den h„r syntax b”r inte orsaka
n†gra problem.
Teckenupps„ttningar specificeras inom hakparenteser och definierar en upps„ttning av acceptabla tecken, eller m”jligtvis en upps„ttning icke acceptabla tecken.
[abc] matchar n†got tecken vilket kan vara a, b, eller c [^abc] matchar ett tecken vilket „r vare sig a, b, eller c [a-z] „r en upps„ttning inom omr†det 'a' till 'z' [a-j-t] „r en upps„ttning tecken inom omr†det 'a' till 't'F”r att matcha ett
-, ^, ] tecken i ett parenteselement,
f”reg† den med ett backslash. Till exempel, [\])}] matchas ],
eller ), eller }.
Du kan ocks† specificera kompletta POSIX teckenklasser i ett ytterligare par av
parenteser med kolon. I den kontexten,
[:alnum:] betyder alla alfanumeriska tecken
(med ASCII, samma som A-Za-z0-9)
[:lower:] betyder alla gemener (sm† bokst„ver)
... etc.
Till exempel, att specificera [[:alnum:] \t] skulla visa alla alfanumeriska
tecken plus mellanslag plus tab.
N†got tecken
Punkt (.) tecknet matchar n†got enstaka tecken, utan att bry sig om vilket
det „r. Till exempel, t.e matchar the, men inte tree.
Ord integrerade tecken
GNU EREs definierar termen "ord integrerande tecken" till att inkludera n†got
alfanumeriskt tecken, eller tecknet underscore _ f”r att spara lite skrivning.
\w „r kort f”r n†got ord integrerande tecken och „r ekvivalent
till [[:alnum:]_] eller [A-Za-z0-9_]. \W f”r n†got
icke-ord integrerande tecken och „r ekvivalent till
[^[:alnum:]_] eller [^A-Za-z0-9_].
Dessa kortformer „r ogiltiga inom hakparentes teckenupps„ttningar.
Inget tecken
En Microsoft ut”kning till ERE's „r att till†ta dig att s„ga "n†got tecken utom
detta tecken" genom att f”reg† det med ett tilde ~. Detta „r helt enkelt kortare
att skriva „n den ekvivalenta hakparentes teckenupps„ttningen (~a „r kortare
att skriva „n [^a]). Till exempel, t~he matchar
tie, men inte the.
Ankare
Ankare specificerar konditioner d„r ett uttryck kan f”rekomma:
^ matchar om vi „r i starten av str„ngen $ matchar om vi „r i slutet av str„ngen \` GNU alternativt s„tt att skriva ^ \' GNU alternativt s„tt att skriva $ \< matchar om vi „r i starten av ett ord (eller hela str„ngen) \> matchar om vi „r i slutet av ett ord (eller hela str„ngen) \B matchar om vi „r inom ett ord \y matchar om vi „r i starten eller slutet av ett ord (eller hela str„ngen)H„r „r "ord" i enlighet med GNU definitionerna som givits ovanf”r.
Till exempel, ^xyz matchar xyz endast om det „r starten
av raden. \<fred matchar fred, freddy,
men inte alfred.
Repetitioner
Genom att anv„nda ?, +, {M}, eller {M,N}
kan du s”ka efter upprepningar:
ab?c matchar a, sedan ingen eller en f”rekomst av b, sedan c
ab+c matchar a, sedan en eller flera f”rekomster av b, sedan c
ab*c matchar a, sedan inhen eller flera f”rekomster av b, sedan c
ab{M}c matchar a, sedan M f”rekomster av b, sedan c
ab{M,}c matchar a, sedan M eller flera f”rekomster av b, sedan c
ab{M,N}c matchar a, sedan mellan M och N f”rekomster av b, sedan c
I det ovanst†ende, ges M och N numren decimalt, d„r om b†da „r givna, M m†ste vara <= N.
Till exempel, [A-Za-z_][A-Za-z0-9_]* matchar n†gon legal C eller C++
identifierare. \w{10,} matchar †tminstone 10 ord integrerande tecken.
\<[0-9]{5}\> matchar ett 5 siffrors nummer.
Alternering
Du kan s”ka en sak eller en annan genom att anv„nda | symbolen. Till
exempel, fred|bill matchar fred eller bill.
fred|bill|rob matchar n†got av dessa 3 namn.
N„stlade ERE's
Parenteser kan anv„ndas f”r att gruppera ERE's till sub-ERE's, s† att operatorer som
repetitioner eller alternerande operator kan till„mpas p† dem. Till exempel,
(frog|toad)+ matchar en eller flera f”rekomster av frog
eller toad.
N„stling kan utf”ras med flera niv†ers djup.
Bakreferenser
Varje g†ng en n„stlad ERE „r matchad, kommer vad som att matchat att spelas in. Du kan g”ra en bakreferens senare i huvud ERE (vilket betyder att vad helst som matchades f”re m†ste matchas igen) genom att specifiera backslash med ett enstaka nummer. Upp till 9 n„stlade ER's kan p† det s„ttet bakrefereras.
Till exempel, \2 s„ger att det andra n„stlade ERE m†ste matchas igen.
Som ett resultat, (a|b)(c|d)\2\1 kommer att matcha acca,
eller adda, eller bcca, eller bddb.
Notera att det ovanst†ende exemplet inte „r en kortform f”r att
skriva (a|b)(c|d)(c|d)(a|b). Bakreferenser refererar inte till ERE,
utan till vad som matchades av det.
Bakreferenser kan g”ras inom n„stlade ERE's f”r att bakrefererera ERE's.
Till exempel, frog|((a|bc)d\1) matchar frog, eller
ada, eller bcdbc, men inte adbc.