Bijlage A. Reguliere expressies

Anders Lund

Vertaler/Nalezer: Otto Bruggeman
Vertaler/Nalezer: Freek de Kruijf
Deze Appendix bevat een beknopte maar hopelijk voldoende en
dekkende introductie tot de wereld van reguliere
expressies. Het documenteert reguliere expressies in de vorm
beschikbaar in KatePart, wat niet compatibel is met de reguliere
expressies van perl, noch met die van bijvoorbeeld
grep.

Inleiding

Reguliere expressies bieden ons een manier om mogelijke inhoud van een tekenreeks te beschrijven zodat deze verstaan wordt door een klein stukje software, waarmee het kan nagaan of een tekst overeenkomt en ook in het geval van geavanceerde toepassingen met de middelen om stukjes overeenkomende tekst op te slaan.

Een voorbeeld: Zeg dat u naar een tekst in paragrafen wilt zoeken die begint met ofwel de namen Hendrik of Piet gevolgd door een werkwoordsvorm zegt.

Met een normale zoekopdracht, zou u beginnen met te zoeken naar de eerste naam, Hendrik misschien gevolgd door ze zoals dit: Hendrik ze en, terwijl u zoekt naar overeenkomsten, moet u diegene negeren die niet het begin van een paragraaf zijn, evenals die waarin het woord beginnend met de letters ze niet ofwel zegt, zei of zoiets is. En dan natuurlijk dat alles herhalen met de volgende naam...

Met reguliere expressies kan die taak worden gedaan met een enkele zoekopdracht en met een grotere graad van precisie.

Om dit te bereiken definieert Reguliere Expressies regels voor het uitdrukken van details op een generaliserende manier van een overeenkomst met een tekenreeks. Ons voorbeeld, die we letterlijk als volgt uitdrukken: Een regel beginnend met ofwel Hendrik of Piet (mogelijk gevolgd door tot 4 spaties of een tab) gevolgd door een witruimte gevolgd door ze en dan ofwel gt of i kan worden uitgedrukt met de volgende reguliere expressie:

^[ \t]{0,4}(Hendrik|Piet) ze(gt|i)

Het bovenstaande voorbeeld demonstreert alle vier belangrijkste concepten van moderne reguliere expressies namelijk:

  • Patronen

  • Toekenningen

  • Aantallen

  • Achterwaartse verwijzingen

Het dakje (^) waarmee de uitdrukking begint is een toekenning, die alleen waar is als de volgende overeenkomende tekenreeks zich aan het begin van de regel bevindt.

De tekenreeksen [ \t] en (Hendrik|Piet) ze(gt|i) zijn patronen. De eerste is een tekenklasse die ofwel overeenkomt met een spatie of een teken (horizontale) tab; het andere patroon bevat eerst een subpatroonn overeenkomend met ofwel Hendrik of Piet, daarna iets wat exact overeenkomt met de tekenreeks ze en tenslotte een subpatroon overeenkomend met ofwel gt of e

De tekenreeks {0,4} is een aantal dat aangeeft ergens van 0 t/m 4 van de vorige.

Omdat software voor reguliere expressies, die het concept van achterwaartse verwijzingen ondersteunt, het gehele deel van de tekenreeks, dat overeenkomt, evenals subpatronen tussen haakjes, opslaat, geeft dus ook toegang tot die verwijzingen, zodat we onze handen kunnen leggen op ofwel de gehele overeenkomst (bij het zoeken in een tekstdocument in een tekstbewerker met een reguliere expressie, die vaak gemarkeerd is als geselecteerd) of ofwel de gevonden naam of het laatste deel van de zin.

Samenvattend zal de uitdrukking overeenkomen met wat we willen waarmee deze moet overeenkomen en alleen daarmee.

De volgende secties zullen in detail beschrijven hoe patronen, tekenklassen, toekenningen, aantallen en achterwaartse verwijzingen, te construeren en te gebruiken en de laatste sectie zal een paar bruikbare voorbeelden geven.