Yet another Regular Expression Rundschau

tempa wrote this 01:10:

Ein regulärer Ausdruck setzt sich wie folgt zusammen: Delimiter Suchmuster Delimiter Modifier, wobei Delimiter oblogatorisch und Modifier optional sind.

  1. $FundstellenArray = preg_match(/Suchmuster/i,$suchtext)
  • Delimiter: „/“ // ebenso mögliche Delimiter # ~ @ !
  • Suchmuster: „Suchmuster“ // nach Begriff suchen
  • Modifier: „i“ // Groß- und Kleinschreibung ignorieren

Taucht ein Delimiter innerhalb des Suchstrings auf, muss dieser mit einem Backslash escaped werden oder ein anderer Delimiter gewählt werden. Fehlt hier die Kontrolle über das Suchmuster, kann die Aufgabe Metazeichen zu escapen automatiert werden.

  1. /\QSuchmuster\E/

Alles zwischen \Q und \E ist Teil des Suchmusters ohne Metazeichen. Metazeichen werden so verwendet wie sie sind ohne deren Funktionalität. Alternativ kann auch die Funktion preg_quote() genutzt werden.

  1. $suchmuster_quoted = preg_quote($suchmuster,$delimiter);
Zeichenauswahl
Code Erläuterung
Muster Entsprechung wie im “Muster”-String
^Muster Entsprechung des “Muster”-Strings am Anfang des Strings Achtung! Zirumflex direkt nach geöffneter eckiger Klammer ändert die Bedeutung!
^Muster$ Alleinstehender “Muster”-String
Muster$ Entsprechung des “Muster”-Strings am Ende des Strings.
[bdf] eines der Zeichen “b”, “d”, “f”
[0-6] eine Ziffer von “0” bis “6” Mit dem Bindestrich wird ein Bereich definiert
[A-Za-z0-9] beliebige lateinische Buchstaben oder beliebige Ziffern
[^a] beliebiges Zeichen außer “a” “^” vor Zeichen in eckigen Klammern negiert selbige
[-A-Z], [A-Z-] bzw. [A-Z\-a-z] Auswahl enthält auch den Bindestrich “-”, wenn er das erste oder das letzte Zeichen in der Aufzählung einer Zeichenklasse ist
. Der Punkt steht für ein beliebiges Zeichen außer einem Zeilenwechsel.
Eckige Klammern definieren eine Zeichenauswahl, das Zirkumflex “^” an erster Stelle negiert die Auswahl, das Zirkumflex innerhalb der Auswahl oder am Ende ist literal zu verstehen, ein Bindestrich “-” am erster oder letzter Stelle in der Klammer ist literal zu verstehen, innerhalb beschreibt es einen Bereich von … bis. Alle anderen Metazeichen in der Klammer werden literal verstanden und als zu Suchendes eingeordnet. In der eckigen Klammer verlieren sie ihre Funktion im regulären Ausdruck.

Runde Klammern fassen logische Gruppen zusammen. Der reguläre Ausdruck #Muster(knabe|haus|gatte.)# findet den Musterknabe, das Musterhaus und den Mustergatten, der Musterartikel hingegen trifft nicht auf das Suchmuster zu. ~“artikel” ist keine erlaubte Alternative in der Suchuntergruppe.

Vordefinierte Zeichenklassen
Code Erläuterung
\d digit, eine Ziffer, allgemeiner als [0-9]. Erfasst [0-9] und weitere Zahlzeichen
\D no digit, keine Ziffern, ob [0-9] oder andere Zahlenzeichen. entspricht [^\d]
\w word character, Buchstabe, Ziffer oder Unterstrich [a-zA-Z_0-9], sowie nicht-lateinische Buchstaben, z.B. Umlaute
\W no word character, weder Buchstabe, Ziffer oder Unterstrich, noch nicht-lateinische Buchstaben, z.B. Umlaute. Equivalent zu [^\w]
\s whitespace, Leerzeichen und Steuerzeichen wie \f, \n, \r, \t und \v
\S no whitespace, kein Leerzeichen oder Steuerzeichen wie \f, \n, \r, \t und \v
Der Backslash dient vor einigen Buchstaben dazu, Zeichenklassen zu definieren, vor Operatoren dient er dazu diese Operatoren außer Kraft zu setzen und das Zeichen nach dem Backslash literal zu nehmen, also als zu suchendes Zeichen.
Wiederholungsfaktoren
Code Erläuterung
? Vorkommen einmal oder keinmal und entspricht {0,1}
+ Vorkommen wenigstens einmal aber auch mehrfach und entspricht {1,}
* Vorkommen beliebig oft auch keinmal und entspricht {0,}
{n} Vorkommen exakt n-mal
{n,} Vorkommen mindestens n-mal, gesteuert durch die Zahl und das folgende Komma
{n,m} Vorkommen mindestens n-mal und maximal m-mal, gesteuert durch Zahlen vor und nach dem Komma
{0,n} Vorkommen keinmal und maximal n-mal
Die Operatoren beziehen sich jeweils auf den vorangestellten Ausdruck, sind dem Ausdruck nachgestellt. "Iteration"{n,m}. Achtung! Entgegen unserer Gewohnheit steht der Asterix (.*) nicht für beliebiges Zeichen, das wird durch den Punkt repräsentiert. Der Stern (Asterix) beschreibt die beliebige Häufigkeit.

[ab]+ entspricht beliebig lange Zeichenfolgen von a auf b und b auf a, oder a auf a und b auf b, die von keinen anderen Zeichen unterbrochen werden, als “a” oder “aabba” oder “aba” oder “aa”, etc.

Modifier
Code Erläuterung
i Groß- und Kleinschreibung ignorieren
U Ungierig statt in der größtmöglichen Zeichenkette nach dem Suchmuster suchen, kleinere Portionen und alles dazwischen auch finden
s Neue Zeilen mit einbeziehen und wie eine Zeile behandeln. Der Punkt für beliebiges Zeichen gilt damit auch für den Zeilenwechsel.
m Mehrere Zeilen
x Leerzeichen außer \s missachten um Kommentare innerhalb des Suchmusters schreiben zu können
S Erweiterte Analyse des Suchmusters um die Suche zu optimieren
Rumschnuppern
Code Erläuterung
(?=muster) unverbindlich nachfolgend nach dem Muster schaun
(?<=muster) unverbindlich von hinten nach vorn nach dem Muster schaun
(?!muster) unverbindlich nach allem schaun, das __nicht__ dem Muster entspricht
(?<!muster) unverbindlich von hinten nach vorn nach allem schaun, das nicht dem Muster entspricht
= Positiv, ! Negativ, < Rückschau, sonst Vorausschau

Rumschnuppern ohne die Muster in den Array zu schreiben, sozusagen eine unverbindliche Umschau, bei der nach Übereinstimmungen der Muster geschaut wird aber nicht weggeschrieben.

Der Beitrag erhebt keinen Anspruch auf Vollständigkeit und so manche regex wird mittlerweile in den Filterfunktionen abgedeckt.

Leave a Reply