Diskussion über den Thread : "Reguläre Ausdrücke Sammlung"

  • Der Thread : Reguläre Ausdrücke Sammlung

    dient (wie der Titel recht unmissverständlich nahelegt) dazu :

    - eine Sammlung von (häufiger) benötigten regulären Ausdrücken aufzubauen

    - auf direkte Fragen zu antworten und/oder vertiefende Kommentare dazu abzugeben

    Wenig hilfreich an dieser Stelle ist es, den Zweck einer solchen Sammlung grundsätzlich in Frage zu stellen (wie in einigen der letzten Beiträge geschehen).

    Außerdem lassen sich solche Beiträge, wie autoiter richtig geschrieben hat, auch nur durch gleichfalls threadfremde Kommentare beantworten. Das macht die Sache nicht besser ;).

    Daher halte ich es für sinnvoll, solche Diskussionen in diesem Parallelthread zu führen !

    fakeraol :

    Die inhaltlichen Punkte deiner Argumentation möchte ich an dieser Stelle gar nicht bewerten. Sie haben, meiner Meinung nach, nur nichts in der o.a. Sammlung zu suchen.

    Vielleicht könnten die Mods die letzten Beiträge ja hierhin verschieben.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • fakeraol !

    Wie ich gesehen habe, hast Du deine Beiträge gerade gelöscht.

    Warum ?

    Man muss den von Dir angesprochenen Punkten ja nicht zustimmen, kann gleichwohl aber darüber diskutieren, nur eben nicht innerhalb der Sammlung.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich will nicht weiter stören. Kippt die irgendwo im Netz gefundenen RegExe in die Sammlung rein, bei Diskussionen nach dem Motto "Hab keine Ahnung, wozu die Slashes in den Ausdrücken sind, ABER ich hab mehr Postings als Du." bin ich falsch.

  • Es ging beim Auslagern der Postings in einen anderen Thread lediglich darum, den ursprünglichen Sinn des Threads zu erhalten, nämlich eine Sammlung von nützlichen regulären Ausdrücken. Nicht direkt auf den Schlips getreten fühlen. ;)

    Bei dem Punkt mit der Erklärung gebe ich dir grundsätzlich recht. Auch der Tipp zu regex101 war gut. Aber genau für solche Zwecke gibt es mindestens ein gutes, deutschsprachiges Tutorial hier im Forum, welches auch auf die Unterschiede zwischen AutoIt-PCRE und dem Rest eingeht. Link hab ich leider gerade wegen nicht funktionierender Suchfunktion nicht parat. Darüber hinaus gibt es noch etliche andere gute RegEx-Tutorials in Englisch oder Deutsch, die zwar nicht auf AutoIt eingehen, aber dennoch RegEx an sich anschaulich vermitteln. Das ist imho auch der bessere Weg, eine formale Sprache wie RegEx zu lernen. Jeden Ausdruck in der angesprochenen Sammlung nochmal haarklein zu erklären macht deswegen wenig Sinn und erzeugt eher Overhead. Wer RegEx (meinetwegen dank des Tutorials) kann, braucht es nicht. Und zum Lernen und Verstehen der Ausdrücke nützt eine komplette Erklärung ob der Komplexität und den fehlenden Grundlagen vermutlich auch eher wenig.

    P.S.:

    Eigene Beiträge in Foren in der Art zu löschen ist unhöflich. So kann man später nicht mehr nachvollziehen, was warum geschrieben worden ist. Man nimmt der Diskussion den Zusammenhang. In einem echten Gespräch kann man ja auch nicht einfach ganze Sätze im Nachhinein rausstreichen.

  • Aber genau für solche Zwecke gibt es mindestens ein gutes, deutschsprachiges Tutorial hier im Forum, welches auch auf die Unterschiede zwischen AutoIt-PCRE und dem Rest eingeht. Link hab ich leider gerade wegen nicht funktionierender Suchfunktion nicht parat

    Du meinst sicher das Tutorial von SEuBo : StringRegExp Tutorial / Reguläre Ausdrücke in AutoIt

    Ich will nicht weiter stören.

    Das ist Unsinn :P.

    Einigen deiner Argumente kann ich durchaus folgen. Stelle sie doch in diesem Thread wieder ein.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich will nicht weiter stören. Kippt die irgendwo im Netz gefundenen RegExe in die Sammlung rein, bei Diskussionen nach dem Motto "Hab keine Ahnung, wozu die Slashes in den Ausdrücken sind, ABER ich hab mehr Postings als Du." bin ich falsch.

    Ok! Ich bin auch dafür, dass du woanders trollst....

    Du hast nicht begriffen, um was es in einem Forum geht.

    Es ist dafür da, sachbezogen zu diskutieren. Nur eben an den dafür vorgesehenen Stellen. Und da liegt der Hase im Pfeffer!

    Wenn du meinst, ein Forum ist dazu da ANDEREN (so wie z.B. DIR) "den Arm aus der Sonne zu legen", dann liegst DU falsch!

    Wenn du möchtest, das dir jemand "den Arm aus der Sonne legt" aka erklärt "...wozu die Slashes in den Ausdrücken sind", dann frag einfach danach! Oder benutze Google....

    Aber gehe nicht davon aus, dass jemand einen "Sammel"-Thread/Beitrag in einem Forum erstellt, um die Wissensdefizite zu diesem Thema der halben Weltbevölkerung zu kompensieren!

    Ein Sammelthread ist dazu da, gezielt Informationen zur Verfügung zu stellen für Leute, die sich mit dem Thema AUSKENNEN!

    Für alle anderen gibt es die Möglichkeit, einen neuen Thread zu erstellen und in diesem Fragen zu einem bestimmten Thema, bspw.: "...wozu die Slashes in den Ausdrücken sind...", zu stellen!


    Kippt die irgendwo im Netz gefundenen RegExe in die Sammlung rein,

    GENAU DAFÜR ist ein Sammelthread da! Dafür, und für NICHTS ANDERES!

  • eMail (einfach): - findet etwas, das aus größerer Entfernung einer email-Adresse ähnlich sieht, aber auch nur, wenn es ganz alleine in einer Zeile steht.

    eMail RFC 3696: - matched nicht auf die gültige Adresse: "Abc@d ef"(t)@gmail.com (selbst wenn sie alleine in einer Zeile steht)

    >> Schlechte Idee: E-Mailadressen mit regex prüfen

    Wer prüft, ob das, was irgendwer irgendwo da draußen gefunden hat, 1. ohne syntaktische Fehler ist und 2. auch tatsächlich das findet, was behauptet wird?

    Genau deshalb ist es eine schlechte Idee, hier jeden wahllos Fundstücke reinkippen zu lassen, die er im schlimmsten Fall mangels Kenntnissen nicht mal verifizieren kann.

    Zu dem Tutorial :

    "2.1Was ist ein Regulärer Ausruck?"

    *s??g.txt mag in der Windows-Suche funktionieren, ein RegEx ist es aber nicht. -> * The preceding token is not quantifiable

    Sowas zur Einführung zu gebrauchen, führt die Leute schon gleich am Anfang auf 'nen falschen Pfad. .*?s..g\.txt oder .*?s.{2}g\.txt wären passende RegExe.

    3.5 Zeichenklassen

    \d - "sucht nicht nach einer Zahl von 0-9. und \d\d sucht folglich auch nicht nach 2 aufeinanderfolgenden Zahlen." sondern nach 'Ziffern'.

    Im weiteren Verlauf des Tutorials verwendet er dann auch die richtigen Begriffe, aber sprachliche Exaktheit ist eine der ersten Lektionen in der Ausbildung zum Lehrer. Wenn es dann etwas komplexer wird, und man dabei Begriffe falsch verwendet, bzw. vertauscht, geht das gewaltig nach hinten los.

    Andy: Ich hab nicht gefragt, wozu die Slashes in den Ausdrücken sind. Dazu kannst Du diepfeile und Bitnugger "den Arm aus der Sonne zu legen".

    Einmal editiert, zuletzt von fakeraol (20. November 2018 um 00:03)

  • Hallo fakeraol !

    Wer prüft, ob das, was irgendwer irgendwo da draußen gefunden hat, 1. ohne syntaktische Fehler ist und 2. auch tatsächlich das findet, was behauptet wird ?

    Letztlich Du selbst ! Das ist mit Beiträgen, Skripten, UDF's etc. aber nicht anders.

    Glücklicherweise gibt es engagierte Foristen, die Fehler i.d.R. bemerken und korrigieren :thumbup:.

    \d - "sucht nicht nach einer Zahl von 0-9. und \d\d sucht folglich auch nicht nach 2 aufeinanderfolgenden Zahlen." sondern nach 'Ziffern'.

    Sorry, aber das ist Erbsenzählerei.

    Grundsätzlich hast Du ja nicht unrecht, aber jemand der sich mit Programmierung beschäftigt sollte den Unterschied zwischen einer Zahl und einer Ziffer kennen. Falls nicht, sind Reguläre Ausdrücke wohl sein geringstes Problem.

    Zu dem Tutorial :

    "2.1 Was ist ein Regulärer Ausdruck?"

    *s??g.txt mag in der Windows-Suche funktionieren, ein RegEx ist es aber nicht.

    Natürlich ist *s??g.txt ein Regulärer Ausdruck ! Es handelt sich "um eine Zeichenkette, die eine Menge von Zeichenketten mittels bestimmter syntaktischer Regeln beschreibt" [sic].

    Es gibt unterschiedliche 'RegEx-Maschinen' mit jeweils eigener Syntaximplementierung.

    AutoIt benutzt z.B. die PCRE Engine - die Windows-Suche halt eine andere.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ehe ich mich in die RegExe von anderen reindenke, kann ich sie auch selber schreiben. Ich verwende ungern Zeug, von dem ich nicht verstehe, wie es funktioniert. Deshalb schau ich mir auch oft die UDFs erst an, bevor ich sie verwende.

    Dann ist wohl Groß- und Kleinschreibung und richtige Zeichensetzung auch Erbsenzählerei. wer läsenkann der, verstet ja auchso was ich sagen will.

    Außerdem reden wir hier nicht von Leuten, die sich mit RegEx-"Programmierung" schon auskennen, sondern von Anfängern (denen man es nicht schwerer machen muß, als nötig).

    In einem PCRE-Tutorial ist *s??g.txt kein gültiger RegEx-Ausdruck. Anfänger tragen von dem Beispiel an evtl. die Aussage weiter mit sich rum, daß ? für "ein Zeichen" stehe, und verstehen dann die nachfolgenden Erklärungen falsch, wundern sich, daß es bei ihnen nicht funktioniert - und geben evtl. auf.

    Streng genommen beschreibt auch "zwei Buchstaben, gefolgt von einer bis vier Ziffern im Bereich von zwei bis fünf" eine Menge von Zeichenketten mittels bestimmter syntaktischer Regeln. Ist dann die menschliche Syntaximplementierung. Bringt einen Anfänger aber nicht weiter, wenn er gleichzeitig mit mehreren, ihm alle unbekannten Syntaximplementierungen konfrontiert wird. Man lernt auch nicht im gleichen Sprachkurs esperanto, spanisch, und portugiesisch gemischt.

    • Offizieller Beitrag

    Dann ist wohl Groß- und Kleinschreibung und richtige Zeichensetzung auch Erbsenzählerei.

    Da bin ich absolut derselben Meinung. In allgemeiner Umgangssprache mag Ziffer und Zahl mal verwechselt werden, aber in einer syntaktischen Beschreibung ist das irreführend, da falsch. In gewissen Bereichen bin ich ein 'Korinthenkacker' :P. In Erläuterungen, Anweisungen etc. sind Worte mit absoluter Sorgfalt und der richtigen Begrifflichkeit zu verwenden. Da bin ich auch dankbar, wenn mir dabei ein Lapsus passiert und mich jemand drauf aufmerksam macht.

    Ehe ich mich in die RegExe von anderen reindenke, kann ich sie auch selber schreiben. Ich verwende ungern Zeug, von dem ich nicht verstehe, wie es funktioniert.

    Kann ich absolut nachvollziehen. Würde ich auch mal als Anregung nehmen, dass wir zur Qualitätssteigerung die geposteten Lösungen mehrfach verifizieren.

    Wobei ich ergänzen möchte, dass die geposteten Pattern auch einen guten Einstieg für eigene Lösungen bieten können. Ihr wisst ja: Der Wald und lauter Bäume. Besonders, wenn man mit einem Problem selten zu tun hat, ist man dankbar einen Lösungsansatz zu finden.

    Natürlich ist *s??g.txt ein Regulärer Ausdruck

    Da muss ich widersprechen. Ein regulärer Ausdruck kann niemals mit einem Quantifier beginnen. Ein Quantifier bezieht sich immer auf den voranstehenden Ausdruck. Steht nichts davor ist es kein regulärer Ausdruck.

  • BugFix

    gepostete Pattern als Einstieg für eigene Lösungen - Da sehe ich das Problem, daß sich der Hund in den Schwanz beißt. Solange ich nicht selber auf die Lösung komme, fehlt mir potentiell das Wissen, um das RegEx eines anderen zu verstehen. Sonst wäre ich ja selber drauf gekommen. Deshalb würde es vor allem helfen, wenn man den Zusammenbau eines RegEx Schritt für Schritt beschreibt, und die dabei verwendeten Konstrukte (z.B. Backreferenzen) erklärt.

    Da helfen auch die "Explanation"'s auf der Seite https://regex101.com/ rechts oben schon mal weiter. Für Optimierungen kann man übrigens die oben rechts über dem "REGULAR EXPRESSION"-Feld angezeigten steps zu Rate ziehen (je weniger Steps, desto schneller kann der Ausdruck verarbeitet werden).

    Hinter den vereinfachten Suchausdrücken der Windows-Suche kann natürlich eine Art Übersetzer liegen, der daraus wieder reguläre Ausdrücke macht, aber für ein Tutorial über PCRE spielt das halt keine Rolle, weil es ein anderes Thema ist.

    • Offizieller Beitrag

    gepostete Pattern als Einstieg für eigene Lösungen - Da sehe ich das Problem, daß sich der Hund in den Schwanz beißt

    Dann habe ich mich unklar ausgedrückt. Ich würde von mir schon sagen, dass ich fit bin mit RegEx. Aber einige Aufgabenstellungen verwende ich extrem selten (z.B. rekursive Pattern), da ist es dann praktisch ein Bsp. zu haben, das die richtige Verwendung aufzeigt.

    Und einige Pattern sind einfach nur reine Schreibarbeit (z.B. IP-Gültigkeit), da übernehme ich gern ein bereits existierendes, wobei ich schon die Arbeitsweise nachvollziehen kann. Das ist etwas, was natürlich jeder Einsteiger auch als Ziel haben muss - zu Erkennen, warum das Pattern zur Lösung führt.

    Letztlich versteht sich die Sammlung, wie eigentlich alles hier im Forum, als Hilfe zur Selbsthilfe. Wer nur mit C&P arbeitet wird auf lange Sicht eh Schiffbruch erleiden.

  • Hallo BugFix !

    Nach meinem Verständnis erfüllen Zeichenketten wie *.mpg oder *s??g.txt , nach den Syntaxregeln der Windows-Suche, durchaus die grundsätzlichen Anforderungen an einen Regulären Ausdruck i.A. . So wurde es im Tutorial ja auch dargestellt.


    Sollte ich diesbzgl. falsch liegen, dann lasse ich mich gerne belehren !

    Dass diese Notationen nach den Regeln der PCRE-Engine von AutoIt unzulässig sein können bzw. sind, habe ich wohl nicht deutlich genug herausgestellt.

    SEuBo hat in seiner Einführung vermutlich die Dateifilter als Anschauungsbeispiel gewählt, weil sie (gerade für Anfänger) einen hohen Wiedererkennungswert besitzen. Im weiteren Verlauf des Tutorials beschreibt er ja mit div. Beispielen die korrekte PCRE-Syntax.

    fakeraol : zu 'Erbsenzählerei'

    Falls Du das persönlich genommen haben solltest, dann tut es mir leid.

    Ich bin auch kein Freund von Schludereien in Wort und Schrift;). Bei der Einstiegshöhe des Themas gehe ich aber davon aus, dass die Verwechslung von Zahl und Ziffer dem Verständnis des Tutorials keinen Abbruch tut.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • BugFix

    Zustimmung, für Fortgeschrittene kann das ein Weg sein. Ich arbeite zwar schon eine Weile mit RegEx, behelfe mir dann aber doch oft mit schnell zusammengeschusterten Ausdrücken, die warsch. suboptimal laufen (viel mehr Steps benötigen, als erforderlich). Trotzdem versuche ich auch immer wieder, tiefer in die Materie einzudringen, UND dein RegExp-Beispiel Ist dafür genau das Richtige :thumbup:. So hab ich mir auch diese Schritt für Schritt-Erklärungen vorgestellt.

    Könnte man in Deinem Beispiel statt dem ersten Lookaround nicht einfach ein ^ verwenden?

    Ein Lookaround "frisst" das abgefragte Zeichen nicht, soweit ich weiß? D. h., ein unmittelbar danach stehender String, der mit diesem Zeichen beginnt, kann trotzdem gefunden werden?

    Ich denke, für das Erstellen eines wirklich guten Tutorials würde sich ein Wiki sehr gut eignen, da man dort Änderungen diskutieren und erfolgte Änderungen evtl. auch wieder zurücksetzen kann (wenn sie keine Verbesserung waren). Gibt's sowas hier?

    Musashi

    Als beidseitiger Lehrersohn bin ich gebranntes Kind. Ich versuche gern, Laien solche technischen Dinge mit Vergleichen aus deren Lebensumfeld näher zu bringen (z.B. Aufbau und Arbeitsweise von Festplatte mit Buch vergleichen).

    Dabei habe ich die Erfahrung gemacht, daß ein einmal falsch verwendeter Begriff das "den Ausführugen folgen können" komplett abreißen kann. Der falsche Begriff geistert dann oft noch lange durch die verständnislosen Nachfragen des Zuhörers, und macht ein vielfaches Mehr an (Erklärungs-)Arbeit notwendig (und verbraucht dabei evtl. die Konzentrationsfähigkeits-Reserven des Zuhörers), als man für das "vor dem Aussprechen nach dem exakten, richtigen Begriff suchen" benötigt hätte. Deshalb spreche ich da oft langsam und bedächtig, z.T. mit (Denk-)Pausen, um mir und dem Zuhörer die geleistete Erklär-/Verstehens-Arbeit nicht kaputt zu machen.

    Einmal editiert, zuletzt von fakeraol (20. November 2018 um 17:09)

  • Als beidseitiger Lehrersohn bin ich gebranntes Kind. Ich versuche gern, Laien solche technischen Dinge mit Vergleichen aus deren Lebensumfeld näher zu bringen (z.B. Aufbau und Arbeitsweise von Festplatte mit Buch vergleichen).

    Ja, dem kann ich in vollem Umfang zustimmen ! Insbesondere die Technik, Beispiele aus dem Lebensumfeld seines Gegenübers zu wählen, hat sich immer bewährt ;).

    Interessanterweise finde ich SEuBo's Einstieg mit den Dateifiltern gerade deshalb gar nicht so schlecht. Jeder kennt Suchmuster wie *.mpg , und erhält so eine Vorstellung wohin die Reise geht. Dass er dabei kurzfristig die syntaktischen Regeln von AutoIt außer Acht lässt, ist möglicherweise das kleinere Übel :/.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • autoiter

    Nicht "Dein". "Unsere(s)".

    Musashi

    Ich hätte bewusst einmal von Windows-Suchmuster, und einmal von PCRE-RegEx geschrieben, damit den Leuten auch nur ja klar ist, daß es in dem Tutorial eigentlich um eine andere Syntax geht.

    Du kennst den Witz mit dem Deutschen, der sich in 'nem engl. Pub 'nen Steak bestellt, und dann ganz entsetzt auf den Koch starrt, der mit dem großen Küchenmesser auf ihn zu kommt?

    Der Deutsche der, die deutsche Sprache im Hinterkopf, gefragt hat "Can i please become a Steak?" :rofl:

    Oft ist es besser, nichts ähnliches im Hinterkopf zu haben.

    • Offizieller Beitrag

    Könnte man in Deinem Beispiel statt dem ersten Lookaround nicht einfach ein ^ verwenden?

    Ein Lookaround "frisst" das abgefragte Zeichen nicht, soweit ich weiß? D. h., ein unmittelbar danach stehender String, der mit diesem Zeichen beginnt, kann trotzdem gefunden werden?

    Das Bsp. ist sicher vor keiner Optimierung gefeit. :D

    Mit meinem heutigen Kenntnis- und Erfahrungsstand würde ich vermutlich das Pattern anders gestalten. Inzwischen ist die Negation das von mir meistgenutzte Token.

    Aber, wie allen bekannt, führen viele Wege nach Rom - aber noch mehr zu einem gültigen Pattern. Die Wahrscheinlichkeit, dass zwei Personen ein komplexes Problem mit dem identischen Pattern lösen, ist relativ gering. Das haben wir schon häufig festgestellt. ;)^

    EDIT:

    Ich möchte euch meine Lieblings-Regex-Tut-Seite empfehlen, sehr gute Tuts und Bsp.: Rex Egg

  • Es ging mir nicht mal um Optimierung, nur darum ob das die gleiche Wirkung hat.

    Außerdem hab ich so mal die Wirkungsweise von Lookaround anschaulich demonstriert bekommen, wieder was dazugelernt, DANKE!