StringRegExp mit Parameter-String

  • Kann mir jemand bei einem StringRegExp pattern helfen?

    Ich habe ein String der so aufgebaut sein kann.
    Hier:

    Code
    '/typ:testTyp1 /art:testArt1 /value:"Das ist ein test!"'


    Herausbekommen möchte ich den jeweiligen Key und Value nach jedem Slash.
    Noch zu sagen wäre, das der Key nicht immer gleich ist (weder im Wert, in der Anzahl, noch in der Reinfolge).

    Patric

    Einmal editiert, zuletzt von prizma (31. Mai 2008 um 14:31)

  • Möglicherweise ist das was für dich: http://regexlib.com/REDetails.aspx?regexp_id=1220
    So, habs auf AutoIt angepasst:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $CMDString = '/a:"value" -big="this -test:1\"23 is & $#@ _ your life" -test=th_3 -tte'
    ; Beginn Array-Erstellung
    $x = StringRegExp($CMDString,'(?:\s*)(?<=[-|/])(?<name>\w*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>[\w]*)))|\w*?)',4)
    Dim $ResultArray[UBound($x)][4]
    For $i = 0 To UBound($x)-1
    $entry = $x[$i]
    For $y = 0 To UBound($entry)-1
    $j = $y
    If $y > 3 Then $j = 3
    $ResultArray[$i][$j] = $entry[$y]
    Next
    Next
    ; Ende Erstellung
    _ArrayDisplay($ResultArray)

    [/autoit]

    Einmal editiert, zuletzt von progandy (31. Mai 2008 um 13:45)

  • Super progandy

    Ich muss leider gestehen, dass RegExp immer noch ein Schloss mit sieben Siegel für mich ist.
    Zum Stats oder Tags auslesen hat es bisher gereicht, aber wenn es Variable wird kommt bei
    mir nur Gulasch.
    Na jedenfalls Danke für die Lösung und ich werde ich mir den Link mal etwas genauer anschauen.

    Ich benötige das übrigens für Funktionen mit variablen Parameter. Es hat mich immer schon
    gestört gerade bei grösseren Funktionen mit Defaults zu Arbeiten.
    So habe ich immer nur ein String als Parameter, den ich Parsen und je nach dem verarbeiten kann.

    Patric

  • Und das ganze als Funktion:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _ParseCMDLine($CMDString)
    ; Description:: Parses a CMD-String to Parameters with Values
    ; Parameter(s): $CMDString -> String to parse
    ; Requirement(s): ?
    ; Return Value(s): Error: o and @error = StringRegExp-Error
    ; Success: 2 Dimensional Array:
    ; $array[$i][0] : Parameter includind value
    ; $array[$i][1] : Parameter
    ; $array[$i][2] : Value with quotation marks (only if value has quotaion marks)
    ; $array[$i][3] : Value without quotation marks
    ; Author(s): Prog@ndy
    ;
    ; Basis: http://regexlib.com/REDetails.aspx?regexp_id=1220
    ;===============================================================================
    ;
    Func _ParseCMDLine($CMDString)
    Local $y, $j, $i, $entry
    Local $x = StringRegExp($CMDString,'(?:\s*)(?<=[-|/])(?<name>\w*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>[\w]*)))|\w*?)',4)
    If @error Then Return SetError(@error,0,0)
    Local $ResultArray[UBound($x)][4]
    For $i = 0 To UBound($x)-1
    $entry = $x[$i]
    For $y = 0 To UBound($entry)-1
    $j = $y
    If $y > 3 Then $j = 3
    $ResultArray[$i][$j] = $entry[$y]
    Next
    Next
    Return $ResultArray
    EndFunc

    [/autoit]