StringRegExp - Überprüfung auf exakte Länge

  • Hallo!
    Hab mir gerade eine Funktion geschrieben, mittels derer ich WildCards überprüfen kann. Das ganze funktioniert auch schon so wie es soll bis auf eine Ausnahme.

    Gibt es da eine Lösung?

    Spoiler anzeigen
    [autoit]

    ConsoleWrite(_WildCard("Autoit.au3", "*.au3") & @CR)
    ConsoleWrite(_WildCard("Autoit", "*.au3") & @CR)
    ConsoleWrite(_WildCard("Autoit.au", "*.au3") & @CR)
    ConsoleWrite(_WildCard("TestFile.au3", "*.au3") & @CR)
    ConsoleWrite(_WildCard("AutoitScript.au3", "A*.au3") & @CR)
    ConsoleWrite(_WildCard("Script.au3", "A*.au3") & @CR)
    ConsoleWrite(_WildCard("Script[1].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_WildCard("Script[10].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_WildCard("Script[10].au3", "Script[*].au3") & @CR)

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

    ConsoleWrite(@CR)

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

    #Region Problemzone ;)
    ConsoleWrite(_WildCard("AutoitScript[10].au3", "Script*.au3") & @CR) ; <-- soll 0 zurückgeben
    ConsoleWrite(_WildCard("Autoit.au3", "???.au3") & @CR) ; <-- soll 0 zurückgeben
    #EndRegion

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

    Func _WildCard($sTest, $sWildCard)
    ;funkey 14.10.2009
    Local $sPattern = $sWildCard
    $sPattern = StringRegExpReplace($sPattern, "\*+", "*")
    $sPattern = StringReplace($sPattern, ".", "\.")
    $sPattern = StringReplace($sPattern, "[", "\[")
    $sPattern = StringReplace($sPattern, "]", "\]")
    $sPattern = StringReplace($sPattern, "+", "\+")
    $sPattern = StringReplace($sPattern, "*", ".*")
    $sPattern = StringReplace($sPattern, "?", ".")
    ;~ ConsoleWrite($sPattern & @CR)
    Return StringRegExp($sTest, "(" & $sPattern & ")")
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    kommentiert und rudimentär getestet:

    [autoit]

    ConsoleWrite(_WildCard("Autoit.au3", "*.au3") & @CR)
    ConsoleWrite(_WildCard("Autoit", "*.au3") & @CR)
    ConsoleWrite(_WildCard("Autoit.au", "*.au3") & @CR)
    ConsoleWrite(_WildCard("TestFile.au3", "*.au3") & @CR)
    ConsoleWrite(_WildCard("AutoitScript.au3", "A*.au3") & @CR)
    ConsoleWrite(_WildCard("Script.au3", "A*.au3") & @CR)
    ConsoleWrite(_WildCard("Script[1].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_WildCard("Script[10].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_WildCard("Script[10].au3", "Script[*].au3") & @CR)

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

    ConsoleWrite(@CR)

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

    #Region Problemzone ;)
    ConsoleWrite(_WildCard("AutoitScript[10].au3", "Script*.au3") & @CR) ; <-- soll 0 zurückgeben
    ConsoleWrite(_WildCard("Autoit.au3", "???.au3") & @CR) ; <-- soll 0 zurückgeben
    #EndRegion

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

    Func _WildCard($sTest, $sWildCard)
    ;funkey 14.10.2009
    Local $sPattern = "^" & $sWildCard & "$" ; Muss von Anfang (^)bis Ende ($) passen
    ; Die erste Umwandlung habe ich nicht verstanden
    ; Reihenfolge der Vertauschungen geändert, damit der Punkt erst am Schluss entsteht und dann nicht mehr
    ; ersetzt wird
    $sPattern = StringReplace($sPattern, ".", "\.")
    $sPattern = StringReplace($sPattern, "[", "\[")
    $sPattern = StringReplace($sPattern, "]", "\]")
    $sPattern = StringReplace($sPattern, "+", "\+")
    $sPattern = StringReplace($sPattern, "*", ".*")
    $sPattern = StringReplace($sPattern, "?", ".")
    ConsoleWrite($sPattern & @CR)
    Return StringRegExp($sTest, "(" & $sPattern & ")")
    EndFunc

    [/autoit]

    Johannes

  • Vielen Dank peethebee!! :thumbup:
    Jetzt läuft es einwandfrei! Die erste Unwandlung war nur dazu gedacht überflüssige * aus dem Pattern zu filtern. Ich hatte vorher versucht das Problem durch einen anderen (umständlicheren) Weg zu lösen. ;)

    Ich hoffe, dass die Funktion mal jemand brauchen kann, da ich sie ziemlich nützlich finde.

    Hier noch mal ohne überflüssige Kommentare.

    Spoiler anzeigen
    [autoit]

    ConsoleWrite(_StringInWildCard("Autoit.au3", "*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("Autoit", "*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("Autoit.au", "*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("TestFile.au3", "*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("AutoitScript.au3", "A*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("Script.au3", "A*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("Script[1].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_StringInWildCard("Script[10].au3", "Script[?].au3") & @CR)
    ConsoleWrite(_StringInWildCard("Script[10].au3", "Script[*].au3") & @CR)
    ConsoleWrite(_StringInWildCard("AutoitScript[10].au3", "Script*.au3") & @CR)
    ConsoleWrite(_StringInWildCard("Aut.au3", "???.au3") & @CR)

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

    Func _StringInWildCard($sTest, $sWildCard)
    ;funkey 14.10.2009
    Local $sPattern = "^" & $sWildCard & "$" ; Muss von Anfang (^)bis Ende ($) passen
    $sPattern = StringReplace($sPattern, ".", "\.")
    $sPattern = StringReplace($sPattern, "[", "\[")
    $sPattern = StringReplace($sPattern, "]", "\]")
    $sPattern = StringReplace($sPattern, "+", "\+")
    $sPattern = StringReplace($sPattern, "*", ".*")
    $sPattern = StringReplace($sPattern, "?", ".")
    ;~ ConsoleWrite($sPattern & @CR)
    Return StringRegExp($sTest, $sPattern)
    EndFunc

    [/autoit]