Syntaxis van reguliere expressies
De volgende beschrijving van reguliere expressies is deels gebaseerd op de documentatie van de REGEXP-bibliotheek van Henry Spencer. Sally gebruikt die bibliotheek om reguliere expressies te verwerken.
Basissyntaxis van reguliere expressies
- '^' - komt aan het begin van de expressie overeen met het begin van een regel; '^test' vindt bijvoorbeeld 'test' aan het begin van een regel
- '$' - komt aan het einde van de expressie overeen met het einde van een regel
- '.' - komt overeen met één willekeurig teken; 'do.' vindt bijvoorbeeld 'dog', 'dot' en 'doe', en 'd..r' vindt 'door' en 'deer'
- '*' - komt na een expressie overeen met nul of meer herhalingen ervan; 'ad*' vindt bijvoorbeeld 'a', 'ad' en 'add', dus 'a' gevolgd door een willekeurig aantal 'd'-tekens
- '+' - komt na een expressie overeen met één of meer herhalingen; 'do+' vindt 'do' en 'doo', dus 'd' gevolgd door minstens één 'o'
- '?' - komt na een expressie overeen met nul of één herhaling; 'add?' vindt 'ad' en 'add', dus 'ad' gevolgd door een optionele 'd'
- '|' - kiest tussen expressies; 'red|blue|black' vindt 'red', 'blue' of 'black'
- '[ ]' - vindt één van de tekens tussen de haken; 'a[dts]' vindt 'ad', 'at' en 'as', dus 'a' gevolgd door 'd', 't' of 's'
- '[^ ]' - vindt één teken dat niet tussen de haken staat; '[^abc]' vindt elk teken behalve 'a', 'b' en 'c'
- '[-]' - geeft een tekenbereik aan; '1[0-9]' vindt alle getallen van '10' tot en met '19'
- '( )' - voegt expressies samen; '(very )*well' vindt 'well', 'very well' en 'very very well', dus een willekeurig aantal keren 'very ' gevolgd door 'well'
- '\' - vóór een teken zoekt dat teken letterlijk; 'too\.' vindt alleen 'too.', terwijl 'too.' ook 'tool', 'took' en 'toon' vindt, dus 'too' gevolgd door een willekeurig teken
Syntaxis van reguliere expressies
Een reguliere expressie bestaat uit nul of meer alternatieven, gescheiden door |. Elke tekst die bij een van die alternatieven past, is een overeenkomst.
Een alternatief bestaat uit nul of meer opeenvolgende delen. Het vindt het eerste deel, gevolgd door het tweede, enzovoort.
Een deel is een atoom, eventueel gevolgd door *, + of ?. Met * past het bij nul of meer herhalingen van het atoom. Met + bij één of meer herhalingen. Met ? bij één overeenkomst of de lege tekenreeks.
Een atoom is een reguliere expressie tussen haakjes (die hetzelfde vindt als de expressie zelf), een tekenbereik (zie hieronder), '.' (één willekeurig teken), '^' (de lege tekenreeks aan het begin van de regel), '$' (de lege tekenreeks aan het einde van de regel), een '\' gevolgd door één letterlijk te zoeken teken, of een enkel teken zonder speciale betekenis dat letterlijk wordt gezocht.
Een tekenbereik is een reeks tussen '[]' en past normaal bij één teken uit die reeks. Begint de reeks met '^', dan past het bij één teken dat niet in de rest voorkomt. Twee tekens met '-' ertussen staan voor alle ASCII-tekens in dat bereik: '[0-9]' past bij elk decimaal cijfer. Zet een letterlijke ']' vooraan, na een eventuele '^', en een letterlijke '-' vooraan of achteraan.
Meerduidigheid
Als een reguliere expressie bij twee verschillende tekstdelen past, wordt het vroegst beginnende deel gekozen. Als beide op dezelfde plaats beginnen maar een verschillende lengte hebben, of even lang zijn maar op verschillende manieren passen, gelden de volgende regels.
Alternatieven worden van links naar rechts geprobeerd. Bij *, + en ? worden de langste mogelijkheden eerst geprobeerd. Geneste constructies worden van buiten naar binnen verwerkt en opeenvolgende constructies van links naar rechts. De gekozen overeenkomst gebruikt de eerste mogelijke keuze.
'(ab|a)b*c' kan op twee manieren bij 'abc' passen. Eerst wordt tussen 'ab' en 'a' gekozen. Omdat 'ab' eerst staat en tot een volledige overeenkomst leidt, wordt dat gekozen. De 'b' is daarmee verbruikt. Om die keuze te respecteren, moet 'b*' zijn laatste mogelijkheid gebruiken: de lege tekenreeks.
Als er geen | voorkomt en er maar één *, + of ? is, wordt de langste mogelijke overeenkomst gekozen. 'ab*' vindt in 'xabbbby' bijvoorbeeld 'abbbb'. In 'xabyabbbz' vindt het echter 'ab' direct na 'x', omdat de vroegst beginnende overeenkomst voorrang heeft.
From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository