Syntax regulärer Ausdrücke

Die folgende Beschreibung regulärer Ausdrücke basiert teilweise auf der Dokumentation von Henry Spencers REGEXP-Bibliothek. Sally verwendet diese Bibliothek zur Auswertung regulärer Ausdrücke.

Grundsyntax regulärer Ausdrücke
  • '^' – am Ausdrucksanfang passend auf den Zeilenanfang; '^test' findet 'test' am Zeilenanfang
  • '$' – am Ausdrucksende passend auf das Zeilenende
  • '.' – beliebiges einzelnes Zeichen; 'do.' findet 'dog', 'dot', 'doe' usw., 'd..r' findet 'door', 'deer' usw.
  • '*' – nach einem Ausdruck für null oder mehr Vorkommen; 'ad*' findet 'a', 'ad' und 'add', also 'a' gefolgt von beliebig vielen 'd'
  • '+' – ein oder mehr Vorkommen des vorigen Ausdrucks; 'do+' findet 'do' und 'doo', also 'd' gefolgt von mindestens einem 'o'
  • '?' – null oder ein Vorkommen; 'add?' findet 'ad' und 'add', also 'ad' mit optionalem 'd'
  • '|' – Alternative zwischen Ausdrücken; 'red|blue|black' findet jedes der Wörter 'red', 'blue' oder 'black'
  • '[ ]' – eines der enthaltenen Zeichen; 'a[dts]' findet 'ad', 'at' und 'as'
  • '[^ ]' – eines der nicht enthaltenen Zeichen; '[^abc]' findet jedes Zeichen außer 'a', 'b' und 'c'
  • '[-]' – Zeichenbereich; '1[0-9]' findet alle Zahlen von '10' bis '19'
  • '( )' – fasst Ausdrücke zusammen; '(very )*well' findet 'well', 'very well', 'very very well', also beliebig viele 'very ' vor 'well'
  • '\' – vor einem Zeichen für dessen wörtliche Bedeutung; 'too\.' findet nur 'too.', während 'too.' auch 'tool', 'took' oder 'toon' findet
Syntax regulärer Ausdrücke

Ein regulärer Ausdruck besteht aus null oder mehr durch „|“ getrennten Zweigen. Er passt auf alles, worauf einer der Zweige passt.

Ein Zweig verkettet null oder mehr Teile: Er passt auf den ersten, gefolgt vom zweiten und so weiter.

Ein Teil ist ein Atom, optional gefolgt von *, + oder ?. * bedeutet null oder mehr Atomtreffer, + einen oder mehr und ? einen Treffer oder die leere Zeichenfolge.

Ein Atom ist ein geklammerter regulärer Ausdruck, ein Zeichenbereich (siehe unten), „.“ für ein beliebiges Zeichen, „^“ für den leeren Text am Zeilenanfang, „$“ für den leeren Text am Zeilenende, „\“ plus Zeichen für dessen wörtliche Bedeutung oder ein gewöhnliches einzelnes Zeichen.

Ein Bereich ist eine Zeichenfolge in []. Normalerweise passt er auf eines ihrer Zeichen. Ein führendes ^ negiert ihn. Zwei durch - getrennte Zeichen stehen für alle ASCII-Zeichen dazwischen; [0-9] etwa für Dezimalziffern. Ein wörtliches ] muss zuerst stehen, nach einem möglichen ^. Ein wörtliches - muss zuerst oder zuletzt stehen.

Mehrdeutigkeit

Passt ein Ausdruck auf mehrere Textstellen, gewinnt die früheste. Beginnen Treffer an derselben Stelle, unterscheiden sich jedoch in Länge oder Auswertung, gelten folgende Regeln.

Zweige werden von links nach rechts geprüft, *, + und ? von längsten zu kürzesten Treffern, verschachtelte Konstrukte von außen nach innen und Verkettungen von links nach rechts. Gewählt wird die erste erfolgreiche Möglichkeit.

Beispiel: (ab|a)b*c kann abc auf zwei Arten erfassen. Zuerst wird zwischen ab und a gewählt; ab steht zuerst und ermöglicht einen Gesamttreffer, also wird es gewählt. Das b ist damit verbraucht; b* muss seine letzte Möglichkeit wählen, die leere Zeichenfolge.

Ohne | und mit nur einem *, + oder ? wird der längste mögliche Treffer gewählt. ab* findet in xabbbby also abbbb. In xabyabbbz findet es hingegen ab direkt hinter x, weil der früheste Beginn Vorrang hat.

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