RegEx Problem

  • ok folgendes:
    Mein String: $sString = "a: 123, b: 456"

    RegEx + Ergebnisse:

    [autoit]

    $aArray = StringRegExp($sString, '\s(\d){1,4}', 1, 1)
    For $iii=0 To UBound($aArray)-1
    MsgBox(0, "", $aPos[$iii])
    Next
    ;Liefert 1 MsgBox mit dem Inhalt 3

    [/autoit][autoit]

    $aArray = StringRegExp($sString, '\s(\d){1,4}', 2, 1)
    For $iii=0 To UBound($aArray)-1
    MsgBox(0, "", $aPos[$iii])
    Next
    ;Liefert 2 MsgBoxen mit den Inhalten 123 und 3

    [/autoit][autoit]

    $aArray = StringRegExp($sString, '\s(\d){1,4}', 3, 1)
    For $iii=0 To UBound($aArray)-1
    MsgBox(0, "", $aPos[$iii])
    Next
    ;Liefert 2 MsgBoxen mit den Inhalten 3 und 6

    [/autoit][autoit]

    $aArray = StringRegExp($sString, '\s(\d){1,4}', 4, 1)
    For $iii=0 To UBound($aArray)-1
    MsgBox(0, "", $aPos[$iii])
    Next
    ;Liefert 2 MsgBoxen ohne Inhalt

    [/autoit]

    Ich brauch aber die beiden exakten werte (also 123 und 456)
    und ja, sie sind variabel... Koordinatensysteme ftw X(

    Einmal editiert, zuletzt von Karill Endusa (8. Februar 2010 um 11:17)

  • So?:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sString = "a: 123, b: 456"

    [/autoit] [autoit][/autoit] [autoit]

    $aErgebnisse = StringRegExp($sString, "(\d+)", 3)
    If Not @error Then _ArrayDisplay($aErgebnisse)

    [/autoit]

    Edit: Willst du dennoch mit Flag=1 arbeiten musst du es schon eher so machen:

    Spoiler anzeigen
    [autoit]

    Global $sString = "a: 123, b: 456"
    Global $i = 1

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $aErg = StringRegExp($sString, "(\d+)", 1, $i)
    If @error Then
    ExitLoop
    Else
    $i = @extended
    ConsoleWrite($aErg[0] & @CRLF)
    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (8. Februar 2010 um 11:15)