Ein Regulärer Ausdruck (kurz auch Regexp, RegExp, Regexe oder Regex von engl. Regular Expression) ist im Prinzip ein Muster, das man auf einen String anwenden kann. Ruby bietet eine Literalmöglichkeit, um Reguläre Ausrücke zu erzeugen:
Die Regulären Ausdrücke von Ruby sind weitestgehend mit denen von Perl identisch.
GrundlegendesEin Regulärer Ausdruck kann mithilfe der Methode String#match auf Strings angewandt werden. Daneben gibt es noch diverse weitere Methoden, die Reguläre Ausfrücke akzeptieren, beispielsweise String#sub. Darüberhinaus kann die Operatormethode String#=~ genutzt werden, um zu prüfen, ob ein Muster auf einen String anwendbar ist. SyntaxWie schon oben genannt, kann ein Regulärer Ausdruck über ein Literal definiert werden. In diesem Ausdruck dürfen verschiedene Musterelemente vorkommen. Die Zeichen a-z und A-Z sowie Zahlen haben so geschrieben keine Sonderbedeutung.
GruppenIn einem Regulären Ausdruck können mithilfe von Klammern ( und ) Gruppen erstellt werden, die ihre Ergebnisse an die Globalen Variablen $1 bis $n (n ist die Anzahl der zuweisenden Klammern in einem Regulären Ausdruck) speichert. Ferner gruppieren Klammern einen Ausdruck so, dass er wie ein einziges Zeichen wirkt. Ein Beispiel zu Letzterem findet sich im nächsten Abschnitt. Nicht-zuweisende, also nur-gruppierende Klammern, lassen sich mit dieser Syntax allein nicht erzeugen.
QuantorenIn einem Regulären Ausdruck dürfen sogenannte Quantoren vorkommen. Sie spezifizieren, wie oft ein vorangegangener Ausdruck an dieser Stelle wiederholt werden soll. Um dies zu verdeutlichen, mache ich mir die bereits im vorigen Abschnitt genannte Eigenschaft der Gruppierung von Klammern zu Nutze. $& oder das Element 0 des MatchData-Objekts beinhalten übrigens den gesamten String, auf den sich das Muster anwenden lies.
Mögliche Quantoren in Ruby sind:
Diese Quantoren versuchen immer, den größtmöglichen String zu finden, man nennt sie daher gierig. Die nicht gierigen Quantoren machen das Gleiche wie ihre gierigen Pendanten, aber veruschen im Gegensatz zu ihnen immer den kleinstmöglichen String zu finden. Sie sind durch ein ? gekennzeichnet, beispielsweise Anker
ModifikatorenEs gibt einige Modifikatoren, die, an einen Regulären Ausdruck angehangen, die Arbeitsweise von diesem beeinflussen. Sie werden angewandt, indem sie bei der Literalschreibweise hinter den abschließenden Schrägstrich / gesetzt werden.
Zeichenklassen und AlternativenZeichen, die innerhalb von eckigen Klammern [ und ] stehen, beschreiben eine Zeichenklasse. An der angegebenen Stelle darf nur ein Zeichen der in der Klammer notierten vorkommen. Alternativen ermöglichen dies mit größeren Zeichenmengen, sie werden durch den Balken | getrennt.
Folgende Zeichenklassen stehen bereits vordefiniert zur Verfügung:
Steht ein ^ am Anfang einer Zeichenklasse, so wird ihre Bedeutung umgewandelt in: "Alles, was nicht in dieser Zeichenklasse vorkommt, ist erlaubt. " Einfache und Erweiterte Reguläre AusdrückeAlles, was in diesem Artikel beschrieben wird, gehört zu den Einfachen Regulären Ausdrücken. Ruby bietet weit mehr Optionen, die allerdings den Rahmen dieses Artikels sprengen würden und strenggenommen auch nicht mehr zu den Regulären Ausdrücken gehören. Diese Erweiterten Regulären Ausdrücke werden exzellent von WoNáDo in seinen Regexp-Tutorials auf der Ruby-Mine erläutert. SonderzeichenreferenzEine kleine Zusammenfassung der Sonderzeichen Regulärer Ausdrücke in Ruby.
Globale VariablenJeder Musterabgleich mit Regulären Ausdrücken weist Globalen Variablen Werte zu. Diese globalen Variablen sind:
Änderungen an Regulären Ausdrücken zu Ruby 1.9.1Ein Wort genügt: Oniguruma. Rubys neue Regexp-Maschine bietet viele neue Möglichkeiten. Ich verweise an dieser Stelle erneut auf WoNáDos Regexp-Tutorials auf der Ruby-Mine (Link siehe unten). Er hat sich dort viel mit den Möglichkeiten beschäftigt. Siehe auch
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||