Die Programmiersprache Ruby (German Edition)
Verhalten des Modifikators
o
lässt sich am besten durch ein Beispiel demonstrieren:
[1,2].map{|x| /#{x}/} # => [/1/, /2/]
[1,2].map{|x| /#{x}/o} # => [/1/, /1/]
9.2.2 Regexp-Fabrikmethoden
Als Alternative zu Regexp-Literalen können Sie reguläre Ausdrücke auch mit
Regexp.new
oder seinem Synonym
Regexp.compile
erzeugen:
Regexp.new("Ruby?") # /Ruby?/
Regexp.new("ruby?", Regexp::IGNORECASE) # /ruby?/i
Regexp.compile(".", Regexp::MULTILINE, "u") # /./mu
Verwenden Sie
Regexp.escape
, um die Zeichen mit einer besonderen Bedeutung in regulären Ausdrücken mit einem Escape-Zeichen zu versehen, bevor sie an den
Regexp
-Konstruktor übergeben werden:
pattern = "[a-z]+" # Einer oder mehrere Buchstaben
suffix = Regexp.escape("()") # Behandle diese Zeichen nicht als besondere Zeichen
r = Regexp.new(pattern + suffix) # /[a-z]+\(\)/
In Ruby 1.9 erstellt die Fabrikmethode
Regexp.union
ein Muster, das die »Vereinigungsmenge« einer beliebigen Zahl von Strings oder
Regexp
-Objekten findet. (Das Ergebnismuster passt also zu beliebigen Strings aus seinen Quellmustern.) Übergeben Sie beliebig viele Argumente oder ein einzelnes Array mit Strings oder Mustern. Diese Fabrikmethode ist sehr nützlich, um Muster zu erstellen, die zu einem Wort aus einer Liste von Wörtern passt. Strings, die an
Regexp.union
übergeben werden, werden automatisch mit Escape-Zeichen versehen (also anders als bei
new
und
compile
):
# Passt zu einem beliebigen der fünf Sprachnamen.
pattern = Regexp.union("Ruby", "Perl", "Python", /Java(Script)?/)
# Passt zu leeren runden, eckigen oder geschweiften Klammern. Escaping wird automatisch
# durchgeführt:
Regexp.union("()", "[]", "{}") # => /\(\)|\[\]|\{\}/
9.2.3 Syntax regulärer Ausdrücke
Viele Programmiersprachen unterstützen reguläre Ausdrücke und nutzen dabei die Syntax, die durch Perl bekannt geworden ist. Dieses Buch stellt die Syntax nicht vollständig vor, aber die folgenden Beispiele zeigen Ihnen die Elemente regulärer Ausdrücke. Dem Tutorium folgt Tabelle 9.2 , wo die Syntax zusammengefasst wird. Der Fokus des Tutoriums liegt auf der Regexp-Syntax von Ruby 1.8, aber ein paar der nur in Ruby 1.9 verfügbaren Features werden ebenfalls vorgestellt. Ein Buch, das sich nur mit reguläre Ausdrücken befasst, ist Reguläre Ausdrücke von Jeffrey E. F. Friedl (O'Reilly).
# Literale Zeichen
/ruby/ # Passt zu "ruby". Die meisten Zeichen passen einfach zu sich selbst.
/¥/ # Passt zum Yen-Zeichen. Multibyte-Zeichen werden
# in Ruby 1.9 und Ruby 1.8 unterstützt.
# Zeichenklassen
/[Rr]uby/ # Passt zu "Ruby" oder "ruby"
/rub[ye]/ # Passt zu "ruby" oder "rube"
/[aeiou]/ # Passt zu jedem kleinen Vokal
/[0-9]/ # Passt zu einer Ziffer; das Gleiche wie /[0123456789]/
/[a-z]/ # Passt zu jedem kleinen ASCII-Buchstaben
/[A-Z]/ # Passt zu jedem großen ASCII-Buchstaben
/[a-zA-Z0-9]/ # Passt zu allen drei
/[^aeiou]/ # Passt zu allem außer einem kleinen Vokal
/[^0-9] # Passt zu allem außer einer Ziffer
# Besondere Zeichenklassen
/./ # Passt zu jedem Zeichen außer einem Zeilenumbruch
/./m # Im Multiline-Modus passt . auch auf einen Zeilenumbruch
/\d/ # Passt zu einer Ziffer: /[0-9]/
/\D/ # Passt zu einer Nicht-Ziffer: /[^0-9]/
/\s/ # Passt zu einem Leerraumzeichen: /[ \t\r\n\f]/
/\S/ # Passt zu allem, was kein Leerraum ist: /[^ \t\r\n\f]/
/\w/ # Passt zu einem einzelnen Wortzeichen: /[A-Za-z0-9_]/
/\W/ # Passt zu allem, was kein Wortzeichen ist: /[^A-Za-z0-9_]/
# Wiederholung
/ruby?/ # Passt zu "rub" oder "ruby": das y ist optional
/ruby*/ # Passt zu "rub" plus 0 oder mehr ys
/ruby+/ # Passt zu "rub" plus 1 oder mehr ys
/\d{3}/ # Passt zu genau 3 Ziffern
/\d{3,}/ # Passt zu 3 oder mehr Ziffern
/\d{3,5}/ # Passt zu 3, 4 oder 5 Ziffern
# Nichtgierige Wiederholung: passt zur kleinsten Zahl an Wiederholungen
/<.*>/ # Gierige Wiederholung: passt zu "perl>"
/<.*?>/ # Nichtgierig: passt zu "" in "perl>"
# Auch nichtgierig: ??, +? und {n,m}?
# Gruppieren mit Klammern
/\D\d+/ # Keine Gruppe: + wiederholt \d
/(\D\d)+/ # Gruppiert: + wiederholt das Paar \D\d
/([Rr]uby(, )?)+/ # Passt zu "Ruby", "Ruby, ruby, ruby" usw.
# Backreference: nutzt eine vorher gefundene Gruppe erneut
/([Rr])uby&\1ails/ # Passt zu ruby&rails oder Ruby&Rails
/(['"])[^\1]*\1/ # String in einfachen oder doppelten Anführungszeichen
# \1 passt zu allem, was in der ersten Gruppe passte
# \2 passt zu allem, was in der zweiten Gruppe passte usw.
# Benannte Gruppen und Backreferences in Ruby 1.9: passt zu einem
Weitere Kostenlose Bücher