Vaste uitdrukkingen (Regular Expressions (REs)) worden gewoonlijk gebruikt om te bepalen of een karakter reeks van belang ergens past in een aantal karakter reeksen. Zij staan het specificeren toe van complexe overeenkomst criteria en zijn dus veel flexibeler dan de normale zoekreeksen.

&xwp; gebruikt een combinatie van veel standaarden voor RE syntaxis. Het functionaliteitsniveau komt het meest overeen met de uitgebreide vaste uitdrukkingen (extended regular expressions (ERE's)) zoals ondersteund door de UNIX egrep en awk programma's. Sommige verbeteringen door POSIX ge‹ntroduceerd, die typisch gevonden worden in UNIX ex en vi, en het meest gevonden in GNU programmatuur, worden ook ondersteund.

Er gelden de volgende regels (zie: &xwp; Vaste uitdrukkingen BNF definitie voor een formele definitie):

Basis karakters

Karakter reeksen

Karakter reeksen worden gespecificeerd tussen vierkante haken '[ ]' en geven een reeks van geaccepteerde karakters aan, of mogelijk een reeks van onacceptabele karakters.

  [abc]   komt overeen met ieder karakter dat kan a, b of c zijn
  [^abc]  komt overeen met ieder karakter dat noch  a, b, noch c is
  [a-z]   is de reeks karakters in het bereik 'a' tot 'z'
  [a-j-t] is de reeks karakters in het bereik 'a' tot 't'
Om overeen te komen met een -, ^, ] karakter tussen rechte haken, sla het met een backslash over, B.v. [\])}] komt overeen met ], of ), of }. U kunt ook complete POSIX karakter classes opgeven in een toegevoegd paar haken met dubbele punt. In deze context,
  [:alnum:]   betekent alle alfa numerieke karakters
              (met ASCII, hetzelfde als A-Za-z0-9)
  [:lower:]   betekent alle kakraters met kleine letter
  ... enz.
B.v., het opgeven van [[:alnum:] \t] staat alle alfanumeriek karaters toe plus spatie plus tab.

Ieder karakter

De punt (.) komt overeen met ieder enkel karakter, zonder zich druk te maken wat het eigenlijk is. B.v. t.e komt overeen met the, maar niet met tree.

Woord samenstellende karakters

GNU ERE's beschrijven de term "woord samenstellend karakter" om ieder alfanummeriek karakter in op te nemen, of het onderstreep _ karakter om wat typen te besparen.

\w is stenografie voor ieder woord samenstellend karakter en staat gelijk met [[:alnum:]_] of [A-Za-z0-9_] \W voor ieder niet woord samenstellend karakter en staat gelijk met [^[:alnum:]_] of [^A-Za-z0-9_].

Deze stenografie is ongeldig in karakter reeksen binnen vierkante haken.

Niet een karakter

Een uitbreiding van Microsoft op ERE's is om u toe te staan om te zeggen "ieder karakter behalve dit karakter" door het vooraf te laten gaan door een tilde ~. Dat is eenvoudig korter om te typen dan de equivalente vierkante haken karakter reeks (~a is korter om te typen dan [^a]). B.v. t~he komt overeen met tie, maar niet met the.

Ankers

Ankers geven condities aan waar een uitdrukking kan voorkomen:

  ^       past als we aan het begin van een reeks zijn
  $       past als we aan het einde van een reeks zijn
  \`      GNU alternatieve manier om ^ te schrijven
  \'      GNU alternatieve manier om $ te schrijven
  \<   past als we aan het begin zijn van een woord (of de gehele reeks)
  \>   past als we aan het einde zijn van een woord (of de gehele reeks)
  \B      past als we in een woord zijn
  \y      past als we aan het begin zijn van een woord (of gehele reeks)
Hier is "woord" gelijk aan de GNU definitie zoals boven gegeven.

B.v., ^xyz past alleen op xyz als het aan het begin van een regel is. \<fred past in fred, freddy, maar niet in alfred.

Herhalingen

Door gebruik te maken van ?, +, {M}, of {M,N} kunt u naar herhalingern zoeken.

  in ab?c   past a, dan nul of ‚‚n voorkomen van b, dan c
  ab+c      past a, dan ‚‚n of meer maal voorkomen van b, dan c
  ab*c      past a, dan nul of meer maal voorkomen van b, dan c
  ab{M}c    past a, dan M maal voorkomen van b, dan c
  ab{M,}c   past a, dan M of meer maal voorkomen van b, dann c
  ab{M,N}c  past a, dan tussen het M en N maal voorkomen van b, dan c

In het bovenstaande zijn M en N getallen in decimalen, waar indien beide gegeven worden, M <= N moet zijn.

B.v., [A-Za-z_][A-Za-z0-9_]* past op ieder wettige C of C++ ID. \w{10,} past op minstens 10 woord samenstellende karakters. \<[0-9]{5}\> past op een getal van 5 cijfers.

Verwisseling

U kunt naar het iets zoeken door gebruik te maken van het | symbool. B.v., fred|bill past op fred of bill. fred|bill|rob past op elk van de 3 namen.

Geneste ERE's

Vierkante haken kunnen worden gebruikt om ERE's te groeperen in sub-ERE's, zodat bewerkingstekens zoals de herhalings- of de verwissel- bewerking op hen kunnen worden toegepast. B.v., (kikker|zalm)+ past op ‚‚n of meer voorkomens van kikker of zalm.

Nesten kan verschillende niveaus diep worden uitgevoerd.

Terugverwijzingen

Iedere keer dat een geneste ERE past, wordt, wat paste, vastgelegd. U kunt naderhand een terugverwijzing doen in de hoofd ERE (wat betekent dat wat er ook paste in het begin ook later weer moet passen) door een backslash op te geven met een enkel decimaal getal. Tot in 9 geneste ERE's kan dus worden terugverwezen.

B.v., \2 zegt dat de tweede geneste ERE opnieuw moet passen. Met als resultaat, (a|b)(c|d)\2\1 zal passen op acca, of adda of bcca of bddb.

Merk op dat het bovenstaande voorbeeld geen stenografie is voor het schrijven van (a|b)(c|d)(c|d)(a|b). Terugverwijzingen referen niet naar de ERE, maar naar dat wat er op paste.

Terugverwijzingen kunnen in geneste ERE's worden gedaan om terug te verwijzen naar geneste ERE's. B.v. kikker|((a|bc)d\1) past op kikker, of ada, of bcdbc, maar niet op adbc.