Frage zu StringRegExp

  • Eine Frage zu StringRegExp,

    Ich habe zwei Hex Strings, die ich vergleichen möchten. Falls sie gleich sind soll n msgbox auftauchen.
    Das Problem is aber, dass in einem der beiden strings anstatt 0-f Fragezeichen an zufälligen stellen hat.
    Meine Frage ist wie muss der "pattern" aussehen, dass die Fragezeichen als eine Art Wildcarts verstanden werden.

    Dass heißt, dass

    AA BB CC DD und
    AA ?? ?C DD
    trotzdem als gleich angegeben werden.

    Thx schonmal im vorraus.

  • Spoiler anzeigen
    [autoit]


    $s1 = "AA BB CC DD"
    $s2 = "AA ?? ?C DD"

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

    If _compare($s1, $s2) Then
    MsgBox(0, "", "Strings sind gleich")
    Else
    MsgBox(0, "", "Strings sind nicht gleich")
    EndIf

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

    Func _compare($s1, $s2, $wildcard = "?")
    If StringLen($s1) = StringLen($s2) Then
    For $i = 1 To StringLen($s1)
    If (StringMid($s1, $i, 1) = StringMid($s2, $i, 1)) Or StringMid($s1, $i, 1) = $wildcard Or StringMid($s2, $i, 1) = $wildcard Then
    If $i = StringLen($s1) Then
    Return 1
    EndIf
    ContinueLoop
    Else
    Return 0
    ExitLoop
    EndIf
    Next
    Else
    Return 0
    EndIf
    EndFunc ;==>_compare

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • i2c läuft super

    UEZ hab vergessen das zu sagen, sie sind eben nicht gleich,
    Sie sind immer unterschiedlich lang.
    könnt ihr mir da auch helfen kriegst nämlich nich auf die Reihe

  • @ i2c
    Die Länge soll aber schon ein Rolle spielen.
    Wenn diese beiden Strings verglichen werden:

    $s1 = AA BB DD EE FF
    $s2 = AA ?? DD ??

    Soll der zweite String mit "?" aufgefüllt werden und dann erst verglichen werden
    d.H.

    $s1 = AA BB DD EE FF
    $s2 = AA ?? DD ?? ??

    Soll true ausspucken

  • Spoiler anzeigen
    [autoit]

    Global $Hex1 = "AA BB CC DD EE FF"
    Global $Hex2 = "AA ?? ?C DD"

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

    If StringRegExp($Hex1, "^" & StringReplace($Hex2, "?", "[[:xdigit:]]") & "(?:\s[[:xdigit:]]{2})*$") Then
    MsgBox(0, "", "$Hex1 == $Hex2")
    Else
    MsgBox(0, "", "$Hex1 != $Hex2")
    EndIf

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

    ; alternative Möglichkeit um den String $Hex2 auf die Länge von $Hex1 zu verlängern:
    ;#include <String.au3>
    ;$Hex2 &= _StringRepeat(" ??", (StringLen($Hex1) - StringLen($Hex2))/3)

    [/autoit]


    Mal ins Blaue geraten: Geht es zufällig um PE-Signaturen?

  • thx, aber soweit bin ich schon.
    immoment versuch ich die signatur der pe mit einer Datenbank abzgleichen und so zu überprüfen ob es irgendwie gepack gecrypted is oderso.
    im sinne wie peid oder ähnliches

  • Ganz am Anfang meiner AutoIt-Zeit hab ich genau diesen Anwendungsfall gehabt.
    PE-Signaturen mit Signaturmustern vergleichen.
    Daher hab ich vermutet das es sich darum handelt.

    Ist das Problem erstmal gelöst für dich oder hast du noch ne Frage?