RegExp Frage bezüglich Zeichen

  • Ja, egal - Haufen drauf. Die Lösung mit dem StringRegExp funktioniert ja. Ist zwar unschön, aber das ArrayToString hat man in drei Zeilen ja auch selbst, von daher braucht man nicht mal einen include.
    Jedenfalls vielen Dank!

    Die Funktion werde ich dann demnächst posten!

  • Hi,
    ich muss den Thread doch noch mal aufwärmen. Hab ein weiteres kleines Problem (und zwar möchte ich jetzt in einem String nach einem oder mehreren zusammenhängenden Zeichen suchen!)
    Folgendes habe ich:

    [autoit]

    #include <Array.au3>
    $s_s = "z" ;~ Der Suchstring
    $s_r = "C:\Folder|C:\Folder\FileZ.exe|C:\FolderZ\FileZZZ.txt|C:\FolderZ\123|C:\FolderZ\123\test.zzz|"
    ;~ C:\FolderZ\123 darf nicht als Treffer gelten! Es darf immmer nur der letzte Teil ab "\" untersucht werden!
    $as_tmp = StringRegExp($s_r, "(?i)[^\|]*z*\|", 3)
    $s_r = ""
    For $i = 0 To UBound($as_tmp) - 1
    $s_r &= $as_tmp[$i]
    Next
    _ArrayDisplay(StringSplit(StringTrimRight($s_r, 1), "|"))

    [/autoit]


    Wie bekomme ich es hin, dass der String der untersucht werden soll (fängt optional mit | an und hört mit | auf) so untersucht wird, dass nur ab dem letzten \ ein Vergleich durchgeführt wird? (Siehe Comments im Quelltext!)

    • Offizieller Beitrag

    Das ist zu sehr um die Ecke gedacht.

    Du willst ja : Einen langen String
    1. teilen in kleinere Strings
    2. diese Strings teilen wenn nötig
    3. dann im letzten Teil des String auf z prüfen
    4. wenn ja dann den gesamten Teilstring zurückgeben.

    Ich denke, dass es mit backtracking gehen sollte, aber da müsste ich auch trial&error machen.

    Mega

  • Naja, find ich nun nicht so sehr um die Ecke gedacht, mehrere Arbeitsschritte in einem zusammenzufassen. Aber da ich noch keine zeit hatte mich mit regulären Audrücken zu beschäftigen, habe ich es nun so gelöst:

    [autoit]

    #include <Array.au3>
    $s_s = "z" ;~ Der Suchstring
    $s_r = "C:\Folder|C:\Folder\FileZ.exe|C:\FolderZ\FileZZZ.txt|C:\FolderZ\123|C:\FolderZ\123\test.zzz|"
    $as_tmp = StringSplit($s_r, "|")
    $s_r = ""
    For $i = 1 To $as_tmp[0]
    If StringInStr(StringTrimLeft($as_tmp[$i], StringInStr($as_tmp[$i], "\", 0, -1)), $s_s) Then $s_r &= $as_tmp[$i] & "|"
    Next
    _ArrayDisplay(StringSplit(StringTrimRight($s_r, 1), "|"))

    [/autoit]


    Wird aber ja wahrscheinlich langsamer sein...