02.09.2013 Aufrufe

Reguläre Sprachen, reguläre Ausdrücke - Links

Reguläre Sprachen, reguläre Ausdrücke - Links

Reguläre Sprachen, reguläre Ausdrücke - Links

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!