Ŝablonoj konsistas el laŭvortaj ĉenoj kaj signoklasoj. Ŝablonoj povas enhavi sub-ŝablonojn, kiuj estas ŝablonoj enfermitaj en krampoj.
En ŝablonoj same kiel en signo klasoj, kelkaj signoj havas specialan signifon. Por laŭvorte kongrui kun iu ajn el tiuj signoj, ili devas esti markitaj aŭ eskapitaj por sciigi al la regula esprimo programaro ke ĝi devus interpreti tiajn signojn en sia laŭvorta signifo.
Ĉi tio estas farita antaŭmetante la signon per malantaŭa oblikvo (\).
La regula esprimo programaro silente ignoros eskapi signon kiu ne havas specialan signifon en la kunteksto, do eskapi ekzemple “j” (\j) estas sekura. Se vi dubas, ĉu signo povus havi specialan signifon, vi do povas eviti ĝin sekure.
Eskapo kompreneble inkluzivas la inversan oblikvan signon mem, por laŭvorte kongrui kun tia, vi skribus \\.
signa klaso estas esprimo kiu kongruas kun unu el difinita aro de signoj. En Regulaj esprimoj, signoklasoj estas difinitaj metante la laŭleĝajn signojn por la klaso en kvadrataj krampoj, [], aŭ uzante unu el la mallongigitaj klasoj priskribitaj malsupre.
Simplaj signoklasoj enhavas nur unu aŭ plurajn laŭvortajn signojn, ekzemple [abc] (kongruas kun ĉiu el la literoj “a”, “b” aŭ “ c”) aŭ [0123456789] (kongruante kun iu ajn cifero).
Ĉar literoj kaj ciferoj havas logikan ordon, vi povas mallongigi tiujn specifante intervalojn de ili: [a-c] estas egala al [abc] kaj [0-9 ] estas egala al [0123456789]. Kombini ĉi tiujn konstrukciojn, ekzemple [a-fynot1-38] estas tute laŭleĝa (la lasta kongruus, kompreneble, ĉu de “a”,“b”,“c”,“d”,“e”,“f”, “y”,“n”,“o”,“t”, “1”,“2”,“3” aŭ “8”).
Ĉar majuskloj estas malsamaj signoj de siaj ne-majusklaj ekvivalentoj, por krei senmajusklan signoklason kongruan kun “a” aŭ “b”, ĉiukaze vi devas skribi ĝin [aAbB].
Kompreneble eblas krei “negativan” klasan kongruon kiel “io ajn krom” Por fari tion metu signon (^) ĉe la komenco de la klaso :
[^abc] kongruos kun ajna signo sed “a”, “b” aŭ “c”.
Krom laŭvortaj signoj, kelkaj mallongigoj estas difinitaj, farante la vivon ankoraŭ iom pli facila:
\aĈi tio kongruas kun la ASCII sonorilsigno (BEL, 0x07).
\fĈi tio kongruas kun la ASCII formo-flua signo (FF, 0x0C).
\nĈi tio kongruas kun la ASCII signo de linio (LF, 0x0A, Unix-novlinio).
\rĈi tio kongruas kun la ASCII kaleŝorevena signo (CR, 0x0D).
\tĈi tio kongruas kun la ASCII horizontala klapeta signo (HT, 0x09).
\vĈi tio kongruas kun la ASCII vertikala klapeta signo (VT, 0x0B).
\xhhhhĈi tio kongruas kun la Unikoda signo responda al la deksesuma nombro hhhh (inter 0x0000 kaj 0xFFFF). \0ooo (t.s., \zero ooo) kongruas kun la signo ASCII/Latin-1 responda al la okta nombro ooo (inter 0 kaj 0377).
.(punkto)Ĉi tio kongruas kun ajna signo (inkluzive de novlinio).
\dĈi tio kongruas kun cifero. Egala al
[0-9]\DĈi tio kongruas kun necifero. Egala al
[^0-9]aŭ[^\d]\sĈi tio kongruas kun blankspaco. Praktike egala al
[ \t\n\r]\SĈi tio kongruas kun neblankspaco. Praktike egala al
[^ \t\r\n], kaj egala al[^\s]\wKongruas kun ajna “vorta signo” - ĉi-kaze ajna litero, cifero aŭ substreko. Egala al
[a-zA-Z0-9_]\WKongruas kun ajna nevorta signo - io ajn krom literoj, ciferoj aŭ substreko. Egala al
[^a-zA-Z0-9_]aŭ[^\w]
La POSIX-notacio de klasoj, [:<class name>:] ankaŭ estas subtenataj. Ekzemple, [:cifero:] estas ekvivalenta al \d, kaj [:space:] al \s. Vidu la plenan liston de POSIX signoklasoj ĉi tie.
La mallongigitaj klasoj povas esti enmetitaj ene de propra klaso, ekzemple por kongrui kun vorta signo, spaceto aŭ punkto, vi povus skribi [\w \.]
La sekvaj signoj havas specialan signifon ene de la signo klaskonstruaĵo “[]”, kaj devas esti eskapitaj por esti laŭvorte inkluditaj en klaso:
]Finas la signoklason. Devas esti eskapata krom se ĝi estas la unua signo en la klaso (povas sekvi neeskapitan signon).
^(marko)Indikas negativan klason, se ĝi estas la unua signo. Devas esti eskapata por kongrui laŭvorte se ĝi estas la unua signo en la klaso.
-(streketo)Indikas logikan intervalon. Devas ĉiam esti eskapata ene de signoklaso.
\(malantaŭa oblikvo)La eskapa signo. Oni devas ĉiam eskapi.
Se vi volas kongrui kun unu el aro de alternativaj ŝablonoj, vi povas apartigi tiujn per | (vertikala streketo).
Ekzemple por trovi aŭ “Johano” aŭ “Harry” vi uzus esprimon Johano|Harry.
Subŝablonoj estas ŝablonoj enfermitaj en krampoj, kaj ili havas plurajn uzojn en la mondo de regulaj esprimoj.
Vi povas uzi subŝablon por grupigi aron da alternativoj en pli granda ŝablono. La alternativoj estas apartigitaj per la signo “|” (vertikala stango).
Ekzemple por kongrui kun iu ajn el la vortoj “int”, “float” aŭ “double”, vi povus uzi la ŝablonon int|float|double. Se vi volas trovi nur unu se ĝi estas sekvata de iom da blankspaco kaj poste kelkaj literoj, metu la alternativojn ene de subŝablono: (int|float|double)\s+\w+.
Se vi volas uzi retroreferencon, uzu subŝablonon (PATTERN) por ke la dezirata parto de la ŝablono memoru. Por eviti ke la subŝablono estu memorita, uzu ne-kaptan grupon (?:PATTERN).
Ekzemple, se vi volas trovi du aperon de la sama vorto apartigitaj per komo kaj eble iom da blankspaco, vi povus skribi (\w+),\s*\1. La subŝablono \w+ trovus pecon da vortsignoj, kaj la tuta esprimo kongruus se tiuj estus sekvataj de komo, 0 aŭ pli da blankspaco kaj tiam egala parto de vortsignoj. (La ĉeno \1 referencas al la unua subŝablono enfermita inter krampoj.)
Rimarko
Por eviti ambiguaĵojn kun uzado de \1 kun kelkaj ciferoj malantaŭ ĝi (ekz. \12 povas esti 12-a subŝablono aŭ nur la unua subŝablono kun 2) ni uzas \{12} kiel sintakson por plurciferaj subŝablonoj.
Ekzemploj:
\{12}1estas “uzu subŝablon 12”\123estas “uzi kapton 1 tiam 23 kiel la normalan tekston”
Antaŭrigarda aserto estas subŝablono, komencanta aŭ ?= aŭ ?!.
Ekzemple por kongrui kun la laŭvorta ĉeno “Bill” sed nur se ne sekvata de “ Gates”, vi povus uzi ĉi tiun esprimon: Bill(?! Gates). (Ĉi tio trovus “Bill Clinton” same kiel “Billy the kid”, sed silente ignorus la aliajn kongruojn.)
Subaj ŝablonoj uzataj por asertoj ne estas kaptitaj.
Vidu ankaŭ Asertoj.
Malantaŭa aserto estas subŝablono, komencante aŭ ?<= aŭ ?<!.
Rigardu malantaŭen havas la saman efikon kiel la rigardo antaŭen, sed funkcias malantaŭen. Ekzemple por kongrui kun la laŭvorta ĉeno “fruit” sed nur se ne antaŭita de “grape”, vi povus uzi ĉi tiun esprimon: (?<!grape)fruit.
Subaj ŝablonoj uzataj por asertoj ne estas kaptitaj.
Vidu ankaŭ Asertoj
La sekvaj signoj havas signifon ene de ŝablono, kaj devas esti eskapitaj se vi volas laŭvorte kongrui kun ili:
\(malantaŭa oblikvo)La eskapa signo.
^(marko)Asertas la komencon de la ĉeno.
$Asertas la finon de ĉeno.
()(maldekstra kaj dekstra krampoj)Indikas subajn ŝablonojn.
{}(maldekstre kaj dekstraj buklaj krampoj)Indikas nombrajn kvantorojn.
[](maldekstre kaj dekstraj kvadrataj krampoj)Indikas signoklasojn.
|(vertikala stango)logika AŬ. Apartigas alternativojn.
+(plus-signo)Kvantigilo, 1 aŭ pli.
*(asterisko)Kvantigilo, 0 aŭ pli.
?(demandosigno)Nedeviga signo. Povas esti interpretita kiel kvantigilo, 0 aŭ 1.