amolip: RegEx: "zero-width positive look-ahead assertion

Beitrag lesen

Hallo seth,

zwei bemerkenswerte Sätze finden sich in »perldoc perlre«:
»It's important to realize that a regular expression is merely a set of assertions that gives a definition of success.«
»We can deal with this by using both an assertion and a negation.«
Wobei hier in »(\D*)(?=\d)« das Element »\D*« als "assertion" bezeichnet wird.
Diese zwei Sätze machen deutlich, dass "assertion" in einem viel allgemeineren Sinne verwendet wird, er ist hier nicht in das enge Korsett als "zero-width"-Sprachelement gezwängt.

Ich übersetze "assertion" mit "Aussage". Ob man den Begriff mit "Aussage" oder "Behauptung" oder sonstwie übersetzt ist irrelevant, ich nehme "Aussage". Dies tue ich, um von Vorstellungen, die man mit dem Begriff "assertion" verbindet, wegzukommen. Jetzt müssen wir zunächst nicht groß über den Begriff "Aussage" philosophieren, eine Aussage ist eine Aussage, so wie ein Satz ein Satz ist. Der Begriff hat also zunächst keine tiefere Bedeutung, sondern er steht für sich selbst, er hat keine andere, keine spezifischere Bedeutung als seine eigene, triviale Bedeutung.

Probleme entstehen nun, wenn man einem trivialen Begriff wie "Aussage" eine konkrete Bedeutung zudefiniert. Wenn man ernstzunehmende englischsprachige Texte, wozu ich »perldoc perlre« zähle, liest, dann wird man feststellen, dass der Begriff "assertion" nur in seiner trivialen Bedeutung verwendet wird und ihm darüber hinaus eben gerade keine explizite Bedeutung als "zero-width"-Sprachelement zudefiniert wird. In »perldoc perlre« ist "assertion" einfach nur eine Aussage, ganz banal und trivial. Widersprich mir, wenn du das anders siehst.
Für nicht ernstzunehmende englischsprachige Texte und für alle originär deutschsprachigen Texte, die mir bisher untergekommen sind, gilt: Falls der Begriff "assertion" überhaupt auftaucht, wird er als Überbegriff für "zero-width"-Sprachelemente definiert. Ist das ein Fehler? Nein, das ist kein Fehler! Ich kann ja auch hingehen und festlegen, bei mir heißen "zero-width"-Sprachelemente hinfort "Ützelprützel". Man kann mir dann vorwerfen der Name sei Schwachsinn, aber man kann mir nicht vorwerfen, es sei falsch, wenn ich beim Sprachelement »(?= ... )« von einem "Ützelprützel" spreche.
Falsch wird es erst, wenn ich bei »(?= ... )« von einem "zero-width-Ützelprützel" spreche. Denn ich habe "Ützelprützel" als "zero-width" definiert, "zero-width" ist damit eine immante Eigenschaft von "Ützelprützel".  Das ist doppelt gemoppelt, das ist eine Tautologie, die vielleicht in einem literarischen Text als Stilmittel verwendet werden kann, aber in einem Fachtext absolut nichts zu suchen hat, weil dies nur zu Verwirrung führt.
Ich nerve meine Nachbarn ja auch nicht mit Geschwätz von meinem "vierrädrigen" Porsche, sonst kommt womöglich noch einer – und zwar einer, der noch keine Ahnung von Autos hat, ein "Neuling" - auf die Idee sich beim Händler nach einem "fünfrädrigen" Porsche zu erkundigen. Der andere Nachbar, der, der sich mit Autos auskennt, der Profi, der würde sich nach einem Maserati erkundigen.

ja, wobei anchors auch bloss lookarounds sind. "^ looks behind", "$ looks ahead", "\b looks around".

^ ist sowas wie (?<!.)
Ja, ich weiß, habe aber diese Sichtweise bisher vernachlässigt. Die Frage ist jetzt, wenn du von einer "zero-width look behind assertion" sprichst, meinst du dann dieses »^« oder jenes Sprachelement »(?<! ... )«?

ach soo. meinst du sowas wie /ab/, wobei 'b' eine "one-width positiv look-ahead assertion" ist? *nase_ruempf*

Ja, wobei es aber nicht reicht, das einfach irgendjemand das behauptet, sondern es muss logisch nachvollziebar begründet sein. Und ich glaube ich kann das jetzt, du hast mir mit deinem Beispiel »^« = »(?<!.)« den entscheidenden Schlag auf den Hinterkopf verpasst. Ich muss das nochmal kurz durchdenken.

Gruß Uwe