Reguläre Sprachen, reguläre Ausdrücke - Links
Reguläre Sprachen, reguläre Ausdrücke - Links
Reguläre Sprachen, reguläre Ausdrücke - Links
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
etwa das drittletzte b mit, weil das ja noch für die zweite Klammer gebraucht wird, und auch ein<br />
bescheidener Stern auf Hungerkur isst trotzdem brav alle überzähligen bs auf.<br />
Keine Gier bedeutet nur, dass der Stern möglichst früh die Mahlzeit einstellt, nicht aber, dass er sie<br />
möglichst spät beginnt; das wird durch das zweite Beispiel demonstriert:<br />
$s = ’aaaaaaaaaab’;<br />
if ($s =~ /(a*b)/) {<br />
print " (mit Gier) gefunden wurde: \"$1\"\n\n";<br />
};<br />
if ($s =~ /(a*?b)/) {<br />
print "(ohne Gier) gefunden wurde: \"$1\"\n\n";<br />
};<br />
mit der Ausgabe:<br />
(mit Gier) gefunden wurde: "aaaaaaaaaab"<br />
(ohne Gier) gefunden wurde: "aaaaaaaaaab"<br />
Der wichtigste Anwendungsfall für die Giervermeidung ist der, dass es wie im folgenden dritten<br />
Beispiel darum geht, einen Textteil zu extrahieren, der durch ein Muster an seinem Ende gegeben ist.<br />
Dasselbe Beispiel ohne die Möglichkeit der Giervermeidung wird recht kompliziert [S.18] . Dazu das<br />
folgende Beispiel<br />
$s = ’Anfang Inhalt Ende, und noch ein Ende’;<br />
if ($s =~ /Anfang(.*)Ende/) {<br />
print " (mit Gier) zwischen Anfang und Ende steht \"$1\"\n\n";<br />
};<br />
if ($s =~ /Anfang(.*?)Ende/) {<br />
print "(ohne Gier) zwischen Anfang und Ende steht \"$1\"\n\n";<br />
};<br />
mit der Ausgabe:<br />
(mit Gier) zwischen Anfang und Ende steht " Inhalt Ende, und noch ein "<br />
(ohne Gier) zwischen Anfang und Ende steht " Inhalt "<br />
Bei der Einführung von Ankern [S.14] (also Zeichen, mit denen im <strong>reguläre</strong>n Ausdruck Anfang oder<br />
Ende des Textes bezeichnet werden) war gesagt worden, dass man im Grunde auf die Anker<br />
verzichten könnte, wenn man stattdessen bei einer Suche an beliebiger Stelle im Text den<br />
uninteressanten Teil explizit mit .* angeben würde. Für die bloße Entscheidung über das Vorliegen<br />
eines Musters ist das richtig, für die Mustersuche nicht: würde man diese Angabe machen, wäre dieser<br />
Stern (je nach Anwendung) möglicherweise gierig und man würde das letzte und nicht das erste<br />
Vorkommen des Musters im Text finden. Das dürfte auch ein Grund für die Konvention sein: es ist<br />
einfacher, die Verankerung am Textanfang durch ein Zeichen explizit zu bezeichnen, als dass man im<br />
umgekehrten Fall die Suche irgendwo im Text durch einen möglicherweise komplexen <strong>reguläre</strong>n<br />
16