Ini-Struktur mit Regex abbilden

  • Hallo Leute,

    ich bin ein absoluter Regex-Idiot und kann nur profanste Dinge. Mit dem Auslesen einer Ini bin ich aktuell überfordert.

    Vorweg: Ich bin mir der Iniread(Section)-Befehle bewusst, möchte aber die Datei lieber nur einmal lesen und dann mit dem String arbeiten.

    Ich kann die aktuelle Struktur ganz plump und erfolgreich nachbauen. Jedoch müsste ich das Pattern bei jeder Änderung in der Ini auch überarbeiten. Ich weiß, Regex kann mehr. Daher würde ich mich sehr freuen, wenn ein kenntnisreicheres Mitglied mir zeigen würde wie es geht. Wie erfasse ich nach der Sektion (\[(.*?)\]) beliebig viele Werte?

    Code
    #include <Array.au3>
    
    $sString = "[ID1]" & @CRLF & "Ab=2019/12/12" & @CRLF & "Nummer=" & @CRLF & "Text=Test" & _
    @CRLF & "An=User1" & @CRLF & "Von=User1" & @CRLF & "Erledigt am=" & @CRLF & "Erledigt von=" & @CRLF & _
    "Jeder=Nein" & @CRLF & "Zuletzt geprüft=2019/01/01" & @CRLF & "Serienregel=Nein" & @CRLF & _
    "Ablage=OrdnerX" & @CRLF & "Geöffnet von=User2" & @CRLF
    
    $aRet = StringRegExp($sString, "\[(.*?)\]\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n.*?=(.*?)\r\n", 3)
    _ArrayDisplay($aRet)

    Grüße autoiter

    • Offizieller Beitrag

    Vielleicht so:

  • Vielen Dank Oscar ! :D
    Funktioniert super! (?:.*?=(.*?)) hatte ich probiert. Das hatte aber nicht funktioniert. Was macht "v+"?

    EDIT: Ah, ok. Das v+ verstehe ich nun. "*(?:" ist wirklich wichtig. Das heißt, der Stern sagt eigentlich - so oft es vorkommt.

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (26. September 2019 um 19:35)

  • Hallo autoiter.

    Ich weiß nicht, obs bekannt ist, aber folgendes habe ich gerade entdeckt.

    RegEx Tester online: https://regex101.com/

    Stand-allone Programme (au3):

    Regex Tester V2.1 (Posting von Szhlopp, Posted September 3, 2008)

    Regex Tester V3.0 (Posting von wraithdu, Posted February 5, 2013)

    Da ich mit Regulären Ausdrücken auf Kriegsfuß stehe, hilft das vielleicht. Zumindest kann man damit gut prüfen, wenn man einen Regex Ausdruck gefunden hat. ;)

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.