0

RegEX Flags

Hallo Forum,

hat schonmal jemand erfolgreich Flags bei Regulären AUsdrücken setzen können? 

Wenn ich die z. B. die Funktion extractx(Textfeld, "[a-z]{4}.*") ohne Flag nutze funktioniert alles wunderbar.

Sobald ich extractx(Textfeld, "[a-z]{4}.*", "m") nutze, sucht er mir nur das "m". Wie wird der Flag richtig gesetzt?

Danke für jede Hilfe!

Tobias

13 Antworten

null
    • Frank_Bohmer
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Tobias,

    um Flags zu setzen, nutze bitte die Variante mit vier Parametern:

    extractx(Text, RegExp, Flags, "$0")

    Im letzten Argument kann ein beliebiger Text angegeben werden, $0 wird durch den Match der RegExp ersetzt, $1 durch den Match der ersten Klammer der RegeExp etc.

    Beispiel:

    extractx("Hello 42 Test", "[0-9]+", "i", "Ergebnis: $0")
    => "Ergebnis: 42"

    extractx("Hello 12,18 Test", "([0-9]+)\,([0-9]+)", "i", "Vor dem Komma: $1, Nach dem Komma: $2")
    => "Vor dem Komma: 12, Nach dem Komma: 18"

    • T_Bartzsch
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hallo Frank,

    super, danke, das werde ich probieren. Das erlaubt ja wirklich ein "chirurgisches" Auseinandernehmen von Text.

    Ich habe nämlich die komplexe Aufgabe folgenden String in seine einzelteile zu zerlegen:

    "2017 Ingelheimer Grüner Silvaner trocken* 0,75 l
    Das Bukett wird bestimmt durch den Duft von Orange, reifer gelber Birne, im Einklang mit Noten nach Holunder und Heu. Im Geschmack saftig straff und fein gepaart mit roter Grapefruit.

    2828 13,0 % vol. 4,1 g/l RZ € 9,99 1L: € 13,32"

    Alles in Anführungszeichen ist ein kompletter Textstring

    Dabei gilt es Jahrgang, Name, Geschmack, Menge, die Beschreibung (Kursiv), Artikelnummer, Alkoholgehalt (%vol.) Restzuckergehalt (g/l), Preis und Literpreis in einzelne Felder zu extrahieren... puh

     

    Beste Grüße

    Tobias

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    An diesem RegEx-Ding hatte ich mich auch schon mal versucht, bin da aber trotz Webrecherche nicht durchgestiegen. Soll ja so ähnlich aufgebaut sein wie bei JavaScript (oder?). Hat vielleicht jemand einen Link mit einer einfachen Erklärung für Doofe?

    • Frank_Bohmer
    • vor 6 Jahren
    • Gemeldet - anzeigen
    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Danke, werde ich mir mal anschauen. Die Hoffnung stirbt zuletzt ... ;)

    • T_Bartzsch
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Es gibt auch diese Online RegEx tester.... die find ich ganz hilfreich

    https://regex101.com/

    oder 

    https://www.regextester.com/

    oder gar

    https://regex-generator.com/

    • Ninox-Professional
    • planoxpro
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Danke Tobias, das könnte sehr hilfreich sein.

     

    Zum Thema "Erklärung für Doofe" habe ich auch noch das hier gefunden:

    https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/

     

    Werde ich mir die Tage alles mal in Ruhe zu Gemüte führen und versuchen, in einfacher Form mit Ninox umzusetzen.

    • Matthias_S
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Ich habe das Problem, dass die Flags bei mir ignoriert werden.
    Ich filter per RegEx einen String, doch er gibt mir immer nur den ersten Match aus.
    Habs schon mit extractx(Ergebnis, "text...(\d+-\d+-\d+)", "gi", "$1")

    Laut Ergebnis und Regex101.com müsste er aber mehrere Matches finden.
    Hat jemand ne Idee?

    • T_Bartzsch
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Hast Du mal nen Beispiel String? Ich bin jetzt zuletzt mit den Gruppen ganz gut klargekommen. Das war ein wertvoller Hinweis....

    • Matthias_S
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Die Gruppen funktionieren. Nur hört nach dem ersten Match auf.

    Beispiel:

    String: is there another is

    RegEx: extractx(Ergebnis, "(is)", "g", "$1")

    Er gibt nur einmal is, aus.

    • T_Bartzsch
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Stimmt, macht er bei mir auch.

    Versuch doch jedes "is" in eine Gruppe zu legen.

    extractx("is there another is", "(is).*(is)" ,"g", "$1 $2")

    • Matthias_S
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Das Problem ist, dass ich in meinem String eine unbestimmte Anzahl an Ergebnissen habe. Da ich nicht weiß, wie viele Ergebnisse ich habe, kann ich auch nicht mit Gruppen arbeiten.

    • Matthias_S
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Das Problem ist, dass ich in meinem String eine unbestimmte Anzahl an Ergebnissen habe. Da ich nicht weiß, wie viele Ergebnisse ich habe, kann ich auch nicht mit Gruppen arbeiten.