StringRegExp

  • Hallo liebe AutoIT Community ,

    Brauche beim folgenden Problem Hilfe

    Spoiler anzeigen
    Code
    $ret = StringRegExp("bla'action=collect&atype=1',bla'action=collect&atype=3',bla'action=collect&atype=2',bla'action=collect&atype=1',", "bla.+&atype=(.+)",3)
    _ArrayDisplay($ret)

    Ich möchte alle Zahlen bei atype auslesen kriege es aber leider nicht hin.

    Hätte jemand ein Ratschlag für mich?

  • Ich möchte alle Zahlen bei atype auslesen kriege es aber leider nicht hin.

    Code
    #include <Array.au3>
    $ret = StringRegExp("bla'action=collect&atype=1',bla'action=collect&atype=3',bla'action=collect&atype=2',bla'action=collect&atype=1',", "bla.+?&atype=(\d+)",3)
    _ArrayDisplay($ret)

    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."

  • Möchtest du nur die Zahlen als Rückgabe?

    Dann z.B. so: &atype=(\d+)

    Deine .+ Konstrukte sind gierig und sorgen dafür, dass diese alles bis zum Ende matchen.
    Daher wird zwischendurch nichts anderes mehr erfasst.

    Zum Erstellen bieten sich spezielle RegEx-Tools an: https://regex101.com/r/zKFK1L/1

    Danke für die Hilfe.

    Habe jetzt mal etwas gelesen und Probiert jedoch komme ich trz nicht weiter...

    Spoiler anzeigen

    Möchte jetzt nur die Zahl hinter Test haben wenn davor im Satz beim Ist eine 1 ist also "is1t"

    Code
    "213Das "is1t" 'ein' Test32" "253Das "ist" 'ein' Test332" "23Das "ist" 'ein' Test342" "237Das "is1t" 'ein' Test32" "283Das "ist" 'ein' Test312" 
  • Hi,

    Wie AspirinJunkie schon ausgeführt hat, ist deine Konstruktion mit .* SUBOPTIMAL, da gierig (greedy)!

    Gierig heißt, es werden die maximal möglichen folgenden Zeichen gefressen, ergo in deinem Beispiel alle bis zum Ende...

    Was du brauchst ist der lazy-Token, in dem Fall das Fragezeichen -> ?

    Also ersetze .* durch .*? und dein Regex gibt das gewünschte Ergebnis zurück!

    https://regex101.com/r/MEqQyC/2

  • Möchte jetzt nur die Zahl hinter Test haben wenn davor im Satz beim Ist eine 1 ist also "is1t"

    Code
    "213Das "is1t" 'ein' Test32" "253Das "ist" 'ein' Test332" "23Das "ist" 'ein' Test342" "237Das "is1t" 'ein' Test32" "283Das "ist" 'ein' Test312" 

    Ich weiß nicht, ob is1t ein Tippfehler ist und es eigentlich ist1 heißen soll.

    Außerdem sind die einfachen und doppelten Anführungszeichen nicht korrekt gesetzt, sofern das als ein String gedacht ist.

    Ggf. ist es von Dir ja so gemeint :

    AutoIt
    #include <Array.au3>
    Local $sText = "213Das is1t 'ein' Test32 253Das ist 'ein' Test332 23Das ist 'ein' Test342 237Das is1t 'ein' Test32 283Das ist 'ein' Test312"
    $ret = StringRegExp($sText, "(?i)is1t.*?Test(\d+)", 3)
    _ArrayDisplay($ret)

    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."

    Einmal editiert, zuletzt von Musashi (22. Januar 2021 um 00:56) aus folgendem Grund: typo