RegEx - mein Kampf

  • Trotz Studium vieler Unterlagen erschließt sich mir RegEx nicht wirklich ...

    Ich habe (als Array):

    192.168.10.99|mein PC

    192.168.10.99|NAS

    192.168.10.99|dein PC

    192.168.10.99|Server

    ca. 200 Einträge dzt.

    dazu Schlüsselworte (sind nur wenige, als Array):

    DNS

    Gateway

    Server

    NAS

    oder ev. als String (was leichter in RegEx zu verarbeiten ist ...) z.B.

    DNS|Gateway|Server|NAS

    vorliegen und möchte - wenn diese bestimmten Schlüsselwörter vorkommen (z.B. in "192.168.10.99|NAS" , eine Aktion beim Erzeugen eines Buttons setzen (Hintergrundfarbe, SchriftFett etc.) - damit habe ich kein Problem, bis auf die RegEx ....

    Natürlich könnte ich für jeden Eintrag "192.168.10.99|NAS" die Schlüsselwörter in einer Schleife durchprüfen (StringInStr..), das dauert halt.

    Vielleicht kann jemand so nett sein und mir mit einer Expression weiterhelfen (PcreTkit scheint es leider so nicht mehr zu geben, damit konnte man Expressions durchprobieren).

    Danke

    LG

  • Ich habe (als Array):
    [...]

    ca. 200 Einträge dzt.
    [...]

    Natürlich könnte ich für jeden Eintrag "192.168.10.99|NAS" die Schlüsselwörter in einer Schleife durchprüfen (StringInStr..), das dauert halt.

    Wieviele Schlüsselwörter sind es denn, dass bei lediglich 200 Einträgen das so lange dauert?
    Bzw. was heißt denn "lange dauert" hier konkret?

    So wie ich das verstehe (bitte korrigieren!):
    Du gehst das Array durch. Zu jedem Arrayeintrag existiert in einem GUI ein jeweiliger Button.
    Sollte ein bestimmtes Schlüsselwort auftauchen (z.B. "Router" oder "Switch" wäre Kategorie "Netzwerk"), dann wird der Button in der jeweiligen Farbe der Kategorie eingefärbt.
    Stimmt so?

    Dann stellt sich für mich die Frage in welcher Form die Schlüsselwörter stehen, wie du diese überprüfst (sicherlich mit StringInStr?) und warum ein RegEx da schneller sein sollte?

    Mach am besten mal ein minmales Beispiel dazu.

    Edit: Ok ich versuche mal mehr nachzuvollziehen was du bei dir machst.
    Aktuell machst du sicherlich soetwas in der Art?:

    Und die innere Schleife möchtest du nun durch ein StringRegExp ersetzen?
    Dann hast du es im Grunde oben schon ziemlich richtig hingeschrieben:

    AutoIt
    ; iteriere alle Arrayeinträge
    For $i = 0 To UBound($aArray) - 1
    
        ; prüfe ob Keyword vorkommt:
        If StringRegExp($aArray[$i][1], '(?i)DNS|Gateway|Server|NAS') Then
                ; färbe Button
        Next
    Next

    4 Mal editiert, zuletzt von AspirinJunkie (6. April 2023 um 12:11)

  • Meinst Du so etwas?

    AutoIt
    $aArray = StringSplit('192.168.10.99|mein PC;192.168.10.99|NAS;192.168.10.99|dein PC;192.168.10.99|Server', ';')
    
    $sPattern = '(DNS|Gateway|Server|NAS)$'
    For $i = 0 To UBound($aArray) - 1
        ; nur NAS und Server ist im Pattern und im Array
        If StringRegExp($aArray[$i], $sPattern) = 1 Then
            ConsoleWrite($aArray[$i] & @CRLF)
        EndIf
    Next
  • Vielleicht hilft Dir diese Seite ein wenig weiter?

    Reguläre Ausdrücke - danielfett.de

    Frohe Ostern

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Sehr interessant. Hatte ich hier schon einmal erwähnt gesehen, aber mangels damaligem Interesse nicht gespeichert (ich weiß Suchfunktion 😔😔). 😔

    Danke

    LG