Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Zeile.
\A
Passt zum Anfang des String.
\Z
Passt zum Ende des String. Wenn ein String mit einem Zeilenumbruch endet, »endet« der Ausdruck direkt vor dem Zeilenumbruch.
\z
Passt zum Ende des String.
\G
Passt zum Punkt, an dem der letzte Match endete.
\b
Passt zu Wortgrenzen, wenn es außerhalb von eckigen Klammern steht. Passt zum Backspace (
0×08
) innerhalb von Klammern.
\B
Passt zu »Nicht-Wortgrenzen«.
(?=
re
)
Positive Vorschauprüfung: Stellt sicher, dass die folgenden Zeichen zu
re
passen, nimmt sie aber nicht mit in den passenden Text auf.
(?!
re
)
Negative Vorschauprüfung: Stellt sicher, dass die folgenden Zeichen nicht zu
re
passen.
(?<=
re
)
Positive Rückschauprüfung: Stellt sicher, dass die vorigen Zeichen zu
re
passen, nimmt sie aber nicht mit in den passenden Text auf. Ruby 1.9.
(?re
)
Negative Rückschauprüfung: Stellt sicher, dass die vorigen Zeichen nicht zu
re
passen. Ruby 1.9.
Verschiedenes
(?
onflags
-
offflags
)
Passt zu nichts, aktiviert aber die durch
onflags
angegebenen Schalter und deaktiviert die durch
offflags
festgelegten Schalter. Diese beiden Strings können in beliebiger Reihenfolge die Modifikatorzeichen
i
,
m
und
x
enthalten. So definierte Modifikatoren sind ab diesem Zeitpunkt bis zum Ende des Ausdrucks oder der Gruppe, zu der sie gehören, oder bis zu einem neuen Überschreiben gültig.
(?
onflags
-
offflags
:
x
)
Passt zu
x
, wobei die angegebenen Modifikatoren nur für diesen Unterausdruck gültig sind. Dies ist eine Gruppe, die sich den Text nicht merkt – also wie
(?:...)
, nur mit Modifikatoren.
(?#...)
Kommentar: Text in den Klammern wird ignoriert.
(?>
re
)
Passt zu
re
unabhängig von Rest des Ausdrucks, unabhängig davon, ob der Rest des Ausdrucks dadurch nicht mehr passt. Nützlich zum Optimieren bestimmter komplexer regulärer Ausdrücke. Der Text wird nicht gespeichert.
    9.2.4 Pattern Matching mit regulären Ausdrücken
    =~
ist der Pattern-Matching-Operator von Ruby. Der eine Operand muss ein regulärer Ausdruck, der andere ein String sein. (Der Operator wird sowohl von
Regexp
als auch von
String
implementiert, daher ist es egal, ob sich der reguläre Ausdruck auf der linken oder der rechten Seite befindet.) Der Operator
=~
prüft den String-Operanden, um herauszufinden, ob er (oder ein Substring) dem durch den regulären Ausdruck definierten Muster entspricht. Wenn ein Match gefunden wird, liefert der Operator den String-Index zurück, an dem der erste Match beginnt. Ansonsten gibt er
nil
zurück:
pattern = /Ruby?/i # Passt zu "Rub" oder "Ruby", unabhängig von Groß-/
     # Kleinschreibung
pattern =~ "backrub" # Gibt 4 zurück
"rub ruby" =~ pattern # 0
pattern =~ "r" # nil
    Nach der Anwendung des Operators
=~
sind wir eventuell nicht nur an der Position des passenden Textes interessiert. Nach einem erfolgreichen Match (das also nicht
nil
liefert) enthält die globale Variable
$~
ein
MatchData
-Objekt mit der vollständigen Information zum Match:
"Hallo" =~ /a\w{2}/ # 1: Passt zu einem a, gefolgt von zwei Wortzeichen
$~.string # "Hallo": der komplette String
$~.to_s # "all": der passende Teil
$~.pre_match # "H": der Teil vor dem Match
$~.post_match # "o": der Teil nach dem Match
    $~
ist eine spezielle Variable, die Thread- und methodenlokal ist. Zwei Threads, die parallel laufen, sehen ihre jeweils eigenen Werte dieser Variable. Und eine Methode, die den Operator
=~
verwendet, verändert nicht den Wert von
$~
, den die aufrufende Methode sieht. Wir werden später noch mehr zu
$~
und anderen globalen Variablen zu sagen haben. Eine objektorientierte Alternative zu dieser magischen und auch etwas kryptischen Variable ist
Regexp.last_match
. Ruft man diese Methode ohne Argumente auf, erhält man denselben Wert wie bei
$~
.
    Ein
MatchData
-Objekt ist umfangreicher, wenn die gefundene
Regexp
Unterausdrücke in Klammern enthielt. In diesem Fall kann uns das
MatchData
-Objekt die Texte (und die Anfangs- und Endposition dieser Texte) liefern, die zu jedem Unterausdruck passen:
# Dies ist ein Muster mit drei Untermustern.
pattern = /(Ruby|Perl)(\s+)(rocks|sucks)!/
text = "Ruby\trocks!" # Text passt zum Muster
pattern =~ text # => 0: Muster passt beim ersten Zeichen
data = Regexp.last_match # => Mehr Details erfahren
data.size # => 4: MatchData-Objekte verhalten sich wie Arrays
data[0] # => "Ruby\trocks!": der komplette passende Text
data[1] # => "Ruby": Text, der für das erste Untermuster passt
data[2] # => "\t": Text, der für das zweite Untermuster passt
data[3] # =>

Weitere Kostenlose Bücher