StringRegExp - mangelhafte Erklärung des Flag

  • RegExp ist in letzter Zeit ein wichtiges Thema für mich. Dabei ist es einerseits wirklich anstrengend, andererseits hat es aber auch (Geschwindigkeits-)Vorteile. Am Anfang, als ich mich einlesen wollte, wurde mir fast schlecht von dem kryptischen Zeugs. Zum Glück gibt es in der AutoIt Hilfe wirklich hilfreiche Informationen und das gleich "seitenweise"! Derjenige, der das geschrieben hat, verdient meinen vollen Respekt, denn er hat das komplexe Thema auf ein verständliches Maß der wichtigsten Informationen heruntergebrochen.

    Nichtsdestotrotz gibt es ein paar Dinge zu verbessern, z. B. die Erklärung des Flag. Für Flag gibt es die Werte $STR_REGEXPMATCH (0), $STR_REGEXPARRAYMATCH (1), $STR_REGEXPARRAYFULLMATCH (2), $STR_REGEXPARRAYGLOBALMATCH (3) und $STR_REGEXPARRAYGLOBALFULLMATCH (4). Und was sind z. B. globale Übereinstimmungen?

    Die Erklärungen sind jedoch unvollständig bis fehlerhaft. Zur Veranschaulichung habe ich die DE Hilfe und die EN Hilfe in einem Screenshot einander gegenüber gestellt.

    Ich habe das Problem nicht im Fehler-Melde-Thread sondern hier gespostet, damit wir nach herzenslust diskutieren können, ohne den anderen Thread aufzublähen. Falls wir zu einem Konsens gelangen, kann er dort gepostet werden.

    Die Hinweise im Screenshot resultieren aus meinen Überlegungen, NICHT aus Wissen. Da sind andere weit besser informiert. Mein Wunsch wäre, dass jemand mit mehr RegEx Wissen den Flag-Bereich vielleich komplett neu erklärt. Das kann dann in die EN Hilfe übernommen werden, die scheinbar auch Fehler enthält. Wie gesagt, ich kann das allerdings nicht genau beurteilen, da ich mein Wissen er vor kurzem aufgestockt habe und den Rest habe ich mir über Tests zusammengereimt.

    Das alles sind Gründe dafür, dass in der Hilfe mal Fakten von RegEx-perten dargestellt werden, aber so, dass es ein Dummy wie ich auch versteht. Da sind bestimmt noch viele andere froh drüber! Was haltet ihr davon?

    Prof. Bernd.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Professor Bernd 22. Juli 2020 um 19:10

    Hat den Titel des Themas von „RegExp - mangelhafte Erklärung des Flag“ zu „StringRegExp - mangelhafte Erklärung des Flag“ geändert.
    • Offizieller Beitrag

    Nun, ich habe mir bisher keine Gedanken gemacht, warum die Flags so heißen.

    Ich weiß nur, dass ich für Flag 2 und 4 bisher eigentlich nie eine Anwendung hatte. Wie die einzelnen Flags arbeiten ist sehr exakt in den Remarks erläutert. Das macht die möglichen Unklarheiten in der Flagbezeichnung locker wett. Insofern aus meiner Sicht kein Handlungsbedarf.


    EDIT:

    Vielleicht wird es deutlicher, wenn man einfach mal einen Test mit allen Flags ausführt:

  • BugFix

    Finde das Beispiel gut. Ich werde es in die Hilfe mitaufnehmen.

    Ich selbst verwende nur Flag 3.

    Fällt dir auch ein Beispiel ein, wo bei Flag 2 unterschiedliche Werte im Array auftauchen?

    Wenn nein finde ich dieses Flag sinnlos.

    • Offizieller Beitrag

    OK, ich glaube so richtig deutlich wird es erst, wenn mehrere Ergebnisgruppen vorliegen:

    • Offizieller Beitrag

    Hier mal noch eine Erklärung in anderen Worten:

    EDIT

    Mir ist gerade ein sehr vernünftiger Grund für die Flags 2 und 4 eingefallen: Man bekommt die Möglichkeit auf den ganzen Match zu zugreifen OHNE diesen in einem Capture aufzufangen.

  • BugFix Deinen Beitrag "Reguläre Ausdrücke übersichtlich darstellen" im Thread "Reguläre Ausdrücke Sammlung" finde ich klasse! Ebenso die Beispiele, die du hier im Thread gepostet hast! :thumbup:

    Damit der Sammlungs-Thread schön sauber bleibt, hier eine Frage: Im zweiten Beispiel-Code, also nach "Für die Verwendung weisen wir das dann einer Variablen zu:" wofür sind da die @CRLFs? Nur zur Optik, wenn man die Variable ausgeben will, oder haben die eine Bedeutung für das Pattern? ... OK, gerade wird mir klar, dass der Kommentar wahrscheinlich bis Zeilenende geht, und wenn da kein @CRLF stünde, würde der Rest des Patterns als Kommentar gesehen.

    Edit: Auch habe ich gerade den Hinweis von AspirinJunkie in der Shoutbox zur Option x gelesen, die meine Erkenntnis nahelegt:

    Zitat von AspirinJunkie in der Shoutbox

    Und um seine Pattern übersichtlicher zu formatieren ist das wichtigste die Option (?x) am Anfang. Mit der werden Leerzeichen und Zeilenumbrüche nicht als Teil des Patterns erkannt. Sprich: Man kann das Pattern vernünftig formatieren wie man es mit jedem anderen Quellcode auch tun würde.

    Auch falls ich mir meine Frage selbst beantwortet habe, poste ich das mal, vielleicht hilfts jemand anderem. :saint:

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    Einmal editiert, zuletzt von Professor Bernd (25. Juli 2020 um 17:06)

    • Offizieller Beitrag

    hier eine Frage: Im zweiten Beispiel-Code, also nach "Für die Verwendung weisen wir das dann einer Variablen zu:" wofür sind da die @CRLFs? Nur zur Optik, wenn man die Variable ausgeben will, oder haben die eine Bedeutung für das Pattern?

    Das Pattern muss in einzelnen Zeilen geschrieben werden, wenn du die Kommentare in dieser Form darstellen willst (alternativ wäre alles in einer Zeile mit (?'Kommentar) - aber dann ist die Übersicht ja wieder weg). Der Zeilenumbruch signalisiert das Ende des Kommentars. Wenn in einer Zeile kein Kommentar stehen würde, könnte man es weglassen.

    • Offizieller Beitrag

    Ich habe mir noch mal überlegt, wie man die ganze Thematik eindeutiger und verständlicher formulieren könnte.

    Also fangen wir mit einem Glossar an, vielleicht so:


    Auf Basis dieser Bezeichnungen hier nochmal eine Erklärung der Flags

    Dann kommen wir zu der Frage, für welche Aufgabenstellung sich welches Flag eignet.

    Vielleicht habt ihr hierfür ja auch noch andere Ideen.


    Und nachdem ich das alles geschrieben habe, kann ich auch die folgende Frage beantworten:

    Und was sind z. B. globale Übereinstimmungen?

    Wir unterscheiden bei den Flagnamen in ..Match und ..FullMatch.

    Ein Match ist ein einzelner "Treffer", ein globaler Match sind alle "Treffer".

    Das wird dann durch "Full" erweitert auf alle SubMatches in einem Match.

    Insofern ist die Flagbezeichnung sauber durchdacht und benennt exakt das zu erwartende Ergebnis.

    Global bedeutet hier also: Alles und nicht nur den ersten Treffer.

  • BugFix

    Wow, danke für die Beschreibung.

    Ich werde diese dann so übernehmen,

    Gerne würde ich auch das Bsp übernehmen.

    Allerdings finde ich es viel zu lang.

    Vor allem das Pattern sollte deutlich kürzer werden, damit man auch versteht was gesucht wird.

    Kannst du ein einfacheres Bsp erstellen?

  • BugFix Großartig! Wirklich gute Beschreibung. :thumbup:

    Jetzt ohne Witz, über solche Erklärungen freue ich mich! Als Profi denkt man oft: "Das ergibt sich doch aus diesem und jenem." Aber als Hilfesuchender denkt man oft: "Häh, ... wie jetzt!?" Der Profi weiß, dass man zusätzliche Infos in den Bemerkungen findet, der Anfänger denkt: "Boah, wenn ich das bis hierhin schon nicht kapiere, brauch ich gar nicht erst weiter zu lesen."

    Damit will ich sagen, wenn man an ein Thema rangeht, das einem NICHT bekannt ist, ist man für klare Forumlierungen dankbar, so wie in deiner Beschreibung. Dabei ist es einem nicht nur recht, wenn sich Begriffe in der Beschreibung wiederholen, sondern man ist dankbar dafür. Beispiel

    Statt

    "In den Parametern werden Werte für die Art der Anzeige und die Anzahl der Elemente angegeben. Diese können A bis F und 1 bis 10 enthalten."

    besser

    "In den Parametern werden Werte für die Art der Anzeige und die Anzahl der Elemente angegeben. Die Optionen können die Werte A bis F für die Art der Anzeige enthalten und 1 bis 10 für die Anzahl der Elemente."

    In meinem Beispiel sieht das vielleicht übertrieben aus, aber als Anfänger ist man wirklich froh, wenn Aussagen quasi überdeutlich formuliert werden. :rock:

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    • Offizieller Beitrag

    Allerdings finde ich es viel zu lang.

    Vor allem das Pattern sollte deutlich kürzer werden, damit man auch versteht was gesucht wird.

    Jetzt schön kurz und mit detaillierter Erklärung.

  • Auch von mir ein dickes Kompliment an BugFix für diese ausführliche Beschreibung :thumbup::thumbup:

    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 habe das Beispiel nochmals gekürzt bzw um _ArrayDisplay erweitert.

    Was haltet ihr davon.

  • • $STR_REGEXPARRAYFULLMATCH
    Im Ergebnisarray wird an [0] der gesamte erste Match ausgegeben, an [1..n] folgen die SubMatches des ersten Matches

    Ich habe den Eindruck, mit $STR_REGEXPARRAYFULLMATCH wird im Ergebnisarray an [0] der gesamte erste Match ausgegeben, an [1] der erste SubMatch des ersten Matches, aber nichts weiter. Zum Testen schreibe mal in deinem Code aus Posting #5 noch zwei Zahlen dazu.


    $sTest1 = "Das ist ein Text mit den Zahlen 1 und 2 und 3 und 4 und 18 und 1 und 1."


    Die Ausgabe bleibt unverändert: 1 1.

    Vergiss es, bin wohl zu müde. :sleeping: Du hast natürlich recht, das oben Beschriebene tritt nur auf, wenn es keine weitern SubMatches gibt. Gibt es weitere SubMatches, wie im Beispiel von Tweaky aus Posting #18 , werden auch diese ausgegeben.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    Einmal editiert, zuletzt von Professor Bernd (26. Juli 2020 um 03:51)

  • Was haltet ihr davon.

    Ich finde es prima und habe es ein wenig ergänzt.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    7 Mal editiert, zuletzt von Professor Bernd (26. Juli 2020 um 05:26)