Regular expressions - Punt en escapen

Deze pagina is op verzoek van een bezoeker teruggeplaatst.
De pagina is echter vrij oud en bevat veel afwerkingsfoutjes.
Gelieve hier rekening mee te houden.

Een willekeurig teken - werken met de punt (.)

De punt (.) is een teken dat in reguliere expressies een speciale betekenis heeft. Voorbeeldje:
/abc.def/
Dit betekent: de letter a, gevolgd door de letter b, gevolgd door de letter c, gevolgd door eender welk teken, gevolgd door de letter d, gevolgd door de letter e, gevolgd door de letter f.

Punt betekent dus "eender welk teken is goed". Dit houdt in: alle letters van a tot z en alle hoofdletters van A tot en met Z, alle cijfers, punten, puntkomma's, uitroeptekens, haakjes open en toe, .... maar: geen nieuwe lijn. Je kan instellen dat het punt een nieuwe lijn ook meerekent, hierover later meer bij het deel over modifiers. Voorbeelden van strings die voldoen aan de regexp:

  • abcxdef
  • abcydef
  • abcadef
  • abc def (let op de spatie tussen de c en de d)
  • abc7def
  • aaaaabc)deffff
  • aoeuabc}defao7eu
Strings die niet voldoen aan de regexp:
  • abcdef
  • abcXYZdef
  • abbcXdef
  • abcXabc
  • abc
    def (let op de nieuwe lijn tussen de c en de d)
  • defXabc

Experimenteren is een zeer goede manier om een computertaal te leren. Probeer bijvoorbeeld de volgende regexpen:

/abc....def/
/[abc].[def]/
/abc.[def]/

Een interessant geval waar ik het nog even over ga hebben is het volgende:

/.a.b./
Dit betekent: een willekeurig teken, gevolgd door een a, gevolgd door een willekeurig teken, gevolgd door een b, gevolgd door een willekeurig teken.

Deze strings zijn goed:

  • xaybz
  • xaxbx
  • xa0b{
  • aaaba
  • AaAbA
  • zzzz0a0b0zzzzz
De volgende strings zijn niet goed:
  • ayb
  • aybz
  • xayb
  • xayybz
  • xbyaz

Opmerking: een punt is dus eigenlijk hetzelfde als [^\n] (\n betekent een nieuwe lijn).

Escapen

Stel, we willen zeggen: een teken a, gevolgd door een punt, gevolgd door een teken b. Als we dan deze regexp nemen:
/a.b/
Wordt de punt zijn speciale betekenis gebruikt, en wordt het niet gezien als een gewone punt. Dus bij deze regexp is de string "axb" ook goed, en dat is niet de bedoeling.
Om nu een punt te gebruiken die geen speciale betekenis heeft, moeten we zeggen dat hij niet moet kijken naar die speciale betekenis. Dat noemt escapen, en dat doen we door een backslash te plaatsen voor het teken:
/a\.b/
Hierbij voldoet "a.b", "aaa.bbb" en "abcdea.bc" aan het patroon, maar bijvoorbeeld "axb" niet.

Naast punten kunnen we ook veel andere dingen escapen. Bijvoorbeeld de slash:

/a\/b/
Goed: "a/b", "abca/bcde", niet goed: "b/b", "ab".

En zelfs een backslash kunnen we escapen:

/a\\b/
Goed: "a\b", "aaa\bbb", niet goed: "b\b", "b\\b", "b\c".


Volgende pagina: Quantifiers {} ? + *