next up previous contents index
Search Next: CSV-Parser Up: Reguläre Ausdrücke Previous: Das MatchData-Objekt   Contents   Index

Reguläre Ausdrücke - ein Überblick


Table 5.1: Wiederholungszeichen


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.


Table 5.2: Wichtige Sonderzeichen

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 !~.


\epsfig{height=36pt,file=images/chan.eps}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
\epsfig{height=10pt,file=images/ruby.eps}


next up previous contents index
Search Next: CSV-Parser Up: Reguläre Ausdrücke Previous: Das MatchData-Objekt   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20