next up previous contents index
Search Next: Reguläre Ausdrücke - ein Up: Reguläre Ausdrücke Previous: Reguläre Ausdrücke   Contents   Index

Das MatchData-Objekt

Ein MatchData-Objekt speichert die Resultate, die der Vergleich eines regulären Ausdrucks mit einem String geliefert hat.

Ruby bietet zwei gleichwertige Schreibweisen für reguläre Ausdrücke:

opa = "Opa fährt einen Porsche 944 Turbo"

# OO-Schreibweise
rxp = Regexp.new('Porsche')   #-> /Porsche/
md = rxp.match(opa)     #-> <MatchData:...>

# kompakte Schreibweise
/Porsche/.match(opa)    #-> <MatchData:...>
/Ferrari/.match(opa)    #-> nil, nicht gefunden

Reguläre Ausdrücke werden richtig interessant, wenn man den gesuchten Begriff nicht Buchstabe für Buchstabe beschreiben kann. In diesem Fall können mit besonderen Anweisungen Zeichenklassen eingesetzt sowie deren Gruppierungen und Wiederholungen bestimmt werden.

Ruby unterstützt die auch aus Perl und Python bekannten Musterbeschreibungen. \w ist ein "`word"'-Zeichen, also Buchstabe oder Ziffer, + bedeutet "`mindestens eins"', insgesamt kann man das folgende Muster als "`Porsche undDasNächsteWort"' lesen.

md = /(Porsche) (\w+)/.match(opa)
md[0]          #-> "Porsche 944"          alles
md[1]          #-> "Porsche"      erste Klammer
md[2]          #-> "944"         zweite Klammer
md.pre_match   #-> "Opa fährt einen "    vorher
md.post_match  #-> " Turbo"             nachher

Die Ergebnisse des Vergleichs werden in einem MatchData-Objekt gespeichert. pre_match und post_match liefern den Teil vor und nach dem gefundenen String. md[0] liefert den gesamten passenden Teilstring zurück. Wenn im regulären Ausdruck Gruppierungen durch ( und ) gesetzt wurden, enthalten md[1], md[2] usw. die entsprechenden Gruppen. Gruppierungen, die mit (?: beginnen, werden nicht in das MatchData-Array übernommen.


\epsfig{height=36pt,file=images/chan.eps}Werden Vergleiche mit regulären Ausdrücken ausgeführt, modifiziert Ruby einige Systemvariablen, mit denen "`interessante "' Teile des Strings ähnlich wie in Perl referenziert werden können.

$&  #-> alles:           "Porsche 944"
$1  #-> erste Klammer:   "Porsche"
$2  #-> zweite Klammer:  "944"
$`  #-> vorher:          "Opa fährt einen "
$'  #-> nachher:         " Turbo"
\epsfig{height=10pt,file=images/ruby.eps}


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