Hoi. [2023-05-05 16:57] Helge Kreutzmann <deb...@helgefjell.de> > On Fri, May 05, 2023 at 04:28:18PM +0200, markus schnalke wrote: > > [2023-05-05 16:11] Helge Kreutzmann <deb...@helgefjell.de> > > > On Fri, May 05, 2023 at 09:22:24AM +0200, markus schnalke wrote: > > > > > wird als länger als keine " > > > > > "Übereinstimmung betrachtet. Beispielsweise stimmt »I<bb*>« mit den > > > > > drei " > > > > > "mittleren Zeichen von »abbbc« überein, > > > > > »I<(wee|week)(knights|nights)> stimmt " > > > > > "mit allen zehn Zeichen von »weeknights« überein. Wird »I<(.*).*>« > > > > > mit »abc« " > > > > > "verglichen, > > > > > > > > ``... auf ... angewendet''. Vergleich finde ich ein unpassendes > > > > Wort, weil keine Gleichheit geprueft wird. > > > > > > Mir ist leider nicht klar, was Du hiergeändert haben möchtest. Das > > > Wort „angewendet“ habe ich gar nicht verwandt? > > > > Ja, da war mein Kommentar etwas zu kryptisch. ;-) > > > > Du hast geschrieben, dass eine RE mit einem String verglichen wird. > > Das finde ich inhaltlich unpassend, weil man REs und Strings IMO > > nicht vergleichen kann, sondern eine RE *matcht* auf einen String. > > Ich finde vergleichen schon passend, und „match“ ist eine Übersetzung > für vergleichen. Nur kein binärer Vergleich (ja/nein), sondern einer, > der eine Zeichnenkette zurückliefert. > > > Folglich sollte der Satz lauten: ``Wird »I<(.*).*>« auf »abc« > > angewendet, ...'' (oder etwas in der Art). > > D.h. Du fasst die regulären Ausdrücke als eine Art Funktion auf? Das > wäre dann freier übersetzt. > > Muss ich kurz drüber nachdenken.
Ich will meine Gedanken dazu nochmal genauer erklaeren: Vergleichen fusst auf Gleichheit. Gleich koennen nur gleichartige Dinge sein. REs und Strings sind sehr verschiedenartige Dinge. Strings sind reine Zeichenfolgen. REs dagegen sind Beschreibungen von Mengen von Zeichenketten. Ich bin kein Sprachwissenschaftler, darum bin ich hier vielleicht ungenau: eine konkrete RE definiert alle Woerter einer Sprache. Die jeweiligen Strings, die darauf matchen, sind somit Teil dieser Sprache. Um es mal in ein anderes Feld zu uebertragen: Der obige Satz dann lauten: ``Wird die Deutsche Sprache mit dem Wort `Haus' verglichen, ...'' Das macht wenig Sinn. Der Sprachtheoretiker wuerde sagen: ``Ist `Haus' Teil der Deutschen Sprache, ...'' In unserem Fall waere es dann: ``Ist »abc« Teil der durch die RE »I<(.*).*>« definierten Sprache, ...'' Allerdings haben Programmierer einen anderen Betrachtungswinkel. Sie reden davon, ob die RE auf einen String matcht, also ob sie ``passt''. In gewisser Weise ist eine RE eine Pruefroutine, die die Frage beantwortet, ob der String zu der durch die RE definierten Sprache (= Menge an Woertern) gehoert. So komme ich auf das Wort ``anwenden''. Konkret passiert hier aber, wie du schon andeutest, mehr: die Antwort ist nicht nur ja/nein, sondern die Antwort ist der frueheste, laengste Substring, auf den die RE passt oder die Information, dass sie gar nicht passt. Das wuerde ich als Routine/Funktion ansehen, die man anwendet. Letztlich muessen wir einsehen, dass es im Deutschen keine direkte Entsprechung von ``to match a RE to a string'' gibt. Will man die Satzstruktur moeglichst gleich lassen, so denke ich, ist ``einen RA auf einen String anwenden'' die beste Umschreibung. Alternativ koennte man versuchen den Satz so umformulieren, dass man das Wort ``passen'' verwenden kann. Hierbei muss man aber aufpassen, denn uebersetzt man: and when "(a*)*" is matched against "bc" both the whole RE and the parenthesized subexpression match the null string. mit: und "(a*)*" passt auf den leeren String von "bc", sowohl der ganze RA als auch der geklammerte Unterausdruck. dann ist das nicht vollstaendig, denn "a*" passt auch auf "a" von "aaaab", aber wendet man es an, dann wird das Ergebnis "aaaa" sein. Die RE passt auf viele Substrings, entscheidend ist aber, welcher das Ergebnis der POSIX-konformen Match-Funktion ist. Puh, jetzt habe ich viel geschrieben. Das ist nun auch wirklich nicht einfach. Ich finde, bei REs muss man sein Gehirn erstmal richtig hindrehen, damit das Denken dazu kompatibel ist. Wenn man nicht ganz passend dazu denkt, dann funktioniert es zwar fuer die einfachen Faelle, aber fuer die komplizierteren nicht mehr. Darum lege ich hier so viel Wert darauf, die Dinge inhaltlich moeglichst korrekt zu formulieren (zumindest nach dem was ich fuer korrekt halte ;-) ). Nachdem ich nun noch ein bisschen in dem Buch von Friedl gestoebert habe, bin ich auf die Idee gekommen, dass man auch das Wort ``suchen'' verwenden koennte: und wenn in "abc" nach "(a*)*" gesucht wird, dann ist das Ergebnis, sowohl des ganzen RAs als auch des geklammerten Unterausdrucks, der leere String. Auch diese Formulierung waere noch eine Option: der RA "(a*)*" erkennt in "abc" den leeren String, sowohl fuer den ganzen RA als auch fuer den geklammerten Teilausdruck Mit diesem Blumenstrauss an Gedanken und Vorschlaegen lasse ich es hier erstmal bewenden, bevor ich mich noch tiefer darin verstricke. Du kannst dann auswuerfeln, wie du es letztlich machen willst. :-D markus