Appendiks B. Regulære udtryk

Anders Lund

Oversætter: Erik Kjær Pedersen

Indholdsfortegnelse

Indledning
Mønstre
Escape-tegn
Tegnklasser og forkortelser
Alternativer: matcher “én af
Undermønstre
Tegn med en speciel betydning indenfor mønstre
Kvantifikatorer
Grådighed
Eksempler i sammenhæng
Påstande
Dette appendix indeholder en kort men forhåbentlig tilstrækkelig og
dækkende introduktion til verden af regulære
udtryk. Det dokumenterer regulære udtryk af den form
der er tilgængelig indenfor Kate, som hverken er kompatibel med de  regulære
udtryk i perl, eller med dem for eksempel i
grep.

Indledning

Regulære udtryk giver os en måde at beskrive noget muligt indhold af en tekststreng på en måde der kan forstås af et lille program, så det kan undersøge om en tekst matcher, og også i tilfælde af avancerede programmer, med muligheden for at gemme dele eller den matchende tekst.

Et eksempel: Lad os sige du ønsker at gennemsøge en tekst for paragraffer der starter med enten navnet “Henrik” eller navnet “Pernille” fulgt af en form af udsagnsordet “sige”.

Med en normal søgning, vil du begynde med at søge efter det første navn, “Henrik” måske fulgt af “s” sådan her: Henrik s, og mens du kigger efter matcher, vil du skulle kassere dem der ikke er begyndelsen af en paragraf, så vel som dem hvor ordet der starter med bogstaverne “s” ikke var “siger”, “sagde” eller sådan. Og derefter skal du selvfølgelig gentage dethele med det andet navn...

Med Regulære udtryk, overstås denne opgave med en enkel søgning, og med en større grad af præcision.

For at opnå dette definerer regulære udtryk regler for at udtrykke i detalje en generalisation af at en streng matcher. Vort eksempel, som vi bogstaveligt kunne udtrykke sådan her: “En linje der begynder med enten ‘Henrik’ eller ‘Pernille’ (muligvis fulgt af op til 4 blanke eller tab-tegn) fulgt af mellemrum fulgt af ‘s’ og så enten ‘iger’ eller ‘agde” kan udtrykkes med følgende regulære udtryk:

^[ \t]{0,4}(Henrik|Pernille) s(iger|agde)

Ovenstående eksempel demonstrerer alle fire hovedbegreber i moderne regulære udtryk, nemlig:

  • Mønstre

  • Påstande

  • Kvantifikatorer

  • Tilbagereferencer

karet (^)-tegnet der begynder udtrykket er en påstand, der kun er sand hvis følgende matchende streng er i begyndelsen af en linje.

Strengene [ \t] og (Henrik|Pernille) s(iger|agde) er mønstre. Den første er en tegnklasse der matcher enten et blankt eller en (vandret) tab-tegn; det andet mønster indeholder først et undermønster der matcher enten Henrik eller Pernille, og så et stykke der matcher den nøjagtige streng s og endelig et undermønster der matcher enten iger eller agde

Strengen {0,4} er en kvantor der siger “hvadsomhelst fra 0 op til 4 af de foregående”.

Programmer der understøtter det regulære udtryk begreb tilbagereferencer gemmer hele den matchende del af strengen så vel som undermønstre i parenteser. Givet en metode til at få adgange til disse referencer, kunne vi få fat på enten hele matchningen (når der søges i et tekstdokument i en editor med et regulært udtryk, som ofte er markeret som udvalgt) eller navnet der er fundet, eller den sidste del af verbet.

Alt i alt vil udtrykket matche der hvor vi ønskede det og kun der.

Følgende afsnit vil beskrive i detalje hvordan man konstruerer og bruger mønstre, tegnklasser, påstande, kvantorer og tilbagereference, og det afsluttende afsnit vil give nogle få nyttige eksempler.