|
Oft möchte man sicherstellen, dass sich das Muster auf den Text
am Anfang oder Ende einer Zeile bezieht. Dies kann mit den Sonderzeichen
^ und $ erreicht werden:
/^./.match("abc\ndef")[0] #-> "a"
/.$/.match("abc\ndef")[0] #-> "c"
Wiederholungen von Musterelementen (Gruppen ebenso wie einzelne Zeichen) werden gemäß Tabelle 5.1 festgelegt. Dabei ist zu beachten, dass die gematchten Bereiche bei der (gierigen) Standardversion so groß wie möglich gewählt werden, mit angehängtem Fragezeichen so klein wie möglich. Ein Anwendungsbeispiel findet sich im CSV-Parser am Ende dieses Kapitels.
Man kann für ein einzelnes Zeichen im Muster Auswahllisten festlegen, indem man
die erlaubten Symbole in eckigen Klammern aufzählt: [aeiou] entspricht
einem klein geschriebenen Vokal. Bei zusammenhängenden Bereichen kann mit
- gearbeitet werden: [0-9A-Fa-f] beschreibt eine
Hexadezimalziffer. Mit einem Dach ^ können Einzelbuchstaben und Bereiche
negiert werden: [^a-z] ist kein Kleinbuchstabe. [^ab]
ist kein "`a"' und kein "`b"'. Einige oft benötigte
Auswahllisten sind mit ihren Abkürzungen in Tabelle 5.2
aufgeführt.
|
|
|
Schließlich können in regulären Ausdrücken Alternativen mit |
aufgeführt werden:
/herauf|herab/ passt sowohl
auf "`herauf"' als auch auf "`herab"' und kann auch
kompakter geschrieben werden: /her(?:auf|ab)/.
Wie in Perl kann =~ als Operator für den Vergleich mit einem
regulären Ausdruck verwendet werden.
Wird das Muster gefunden, wird die Anfangsposition zurückgeliefert,
andernfalls nil. Der Negativ-Vergleich !~ ergibt true,
wenn das Muster nicht auf die Zeichenkette passt, false falls es eine Übereinstimmung gibt.
Das liefert eine alternative Syntax
für den Einsatz in if- oder while-Konstruktionen
line = "" while line !~ /ruby/ print "Password: " line = STDIN.gets end # ist gleichwertig mit line = "" while not /ruby/.match(line) print "Password: " line = STDIN.gets end
Folgende Perl-ähnliche Schreibweisen findet man auch gelegentlich:
string =~ regexp # (1) regexp =~ string # (2) ungewöhnlich string =~ string # (3)
(1) und (2) vergleichen den regulären Ausdruck mit dem String, bei (3)
wird der String auf der rechten Seite als regulärer Ausdruck interpretiert,
der mit dem String links verglichen wird. Entsprechendes gilt für
!~.
Bei regulären Ausdrücken wird das in $KODE festgelegte
Encoding verwendet. Mit dem Suffix
n wird diese Angabe ignoriert,
s verwendet das japanische SJIS, u benutzt Unicode etc.
string.gsub(/&/n, '&') # ohne Encoding