StringRegExp - Limitierung der Subpatterngröße

  • Edit: Gelöst, vielen Dank. Es lag nur daran, dass _ArrayDisplay diese Stringlänge nicht mehr verarbeiten konnte.

    Hallo,

    Ausgehend von diesem Thread hier, habe ich mal angefangen zu basteln. Dabei ist mir aufgefallen, dass ich entweder ein ungünstiges Pattern geschrieben habe (habe jetzt schon mindestens 10 Versuche gemacht, dabei mit unterschiedlichen Patterns und Flags), oder StringRegExp die Größe der Subpatterns Limitiert (Hier im Test ab 97 Zeilen).

    Weiß jemand warum, oder wie man das beheben kann?
    Mit diesem Script könnt ihr euch das Testscript erstellen:

    Spoiler anzeigen
    [autoit]

    Local $sText
    _AddLines(10) ; 10 Zeilen "Hauptscript"

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

    For $i = 50 To 110 Step 1 ; Funktionen mit je 50 bis 110 Zeilen.
    _AddFunc($i)
    Next
    FileDelete(@ScriptDir & "\StringRegExpTest.au3")
    FileWrite(@ScriptDir & "\StringRegExpTest.au3", $sText)

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

    Func _AddFunc($iLines)
    $sText &= @CRLF & @CRLF
    $sText &= "Func _" & $iLines & "Lines()" & @CRLF
    _AddLines($iLines, @TAB)
    $sText &= "EndFunc" & @CRLF
    EndFunc ;==>_AddFunc

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

    Func _AddLines($iLines, $sSpacing = "")
    For $i = 1 To $iLines
    $sText &= StringFormat("%sConsoleWrite(@ScriptLineNumber & @CRLF)" & @CRLF, $sSpacing)
    Next
    EndFunc ;==>_AddLines

    [/autoit]

    Das wird dann hiermit geöffnet:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Local $sFilePath, $sFileRead, $aFunction

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

    ; Datei einlesen
    $sFilePath = FileOpenDialog("Script auswählen", "", "Au3 Files (*.au3)")
    If @error Then Exit
    $sFileRead = FileRead($sFilePath)

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

    ; Funktionsnamen und -inhalt auslesen
    $aFunction = StringRegExp($sFileRead, '(?im)^(Func (\w+)\(.*\)\r\n(?:.+\r\n)+^EndFunc)',3)
    _ArrayDisplay($aFunction)
    Exit

    [/autoit]

    Dass man da auch tricksen kann, und die Funktionen mit den "normalen" Stringbefehlen raussuchen, weiß ich auch. Mir geht es aber nur um diese StringRegExp-Limitierung (Ich wage ja kaum es einen Bug zu nennen).