RegExp - Backreferenz negieren?

    • Offizieller Beitrag

    Folgendes Szenario:
    Ein String enthält einfach und 3-fach quotierte Substrings.
    Hallo und 'Str_a' und '''Str_a1''' und "Str_b" und """Str_b1"""

    Ich möchte jetzt alle Quotierungen auslesen.
    Nur ' und '''
    ginge so:

    [autoit]


    $match = StringRegExp($s, "'([^']+)'", 3)
    _ArrayDisplay($match)

    [/autoit]

    Und Quotierung mit " oder """ finde ich so

    [autoit]


    $match = StringRegExp($s, '"([^"]+)"', 3)

    [/autoit]


    Nun wäre es schön, das in einem Aufruf zu erledigen.
    Mit Backreferenz auf das gefundene Quotierungszeichen geht das auch fein.

    [autoit]


    $match = StringRegExp($s, '("' & "|'" & ')([\w]+)\1', 3)
    _ArrayDisplay($match)

    [/autoit]


    Nun ist es aber nicht ausgeschlossen, dass ein quotierter String in sich auch das Quotierungszeichen enthält ('''Das ist so'ne Sache''').
    Der wird ignoriert, weil das Pattern \w für die Gruppe nicht zutrifft. Ich müsste also in einer negierenden Gruppe die Referenz auf den erkannten Begrenzer nutzen.
    Etwa so: statt '...([\w]+)\1' dann '...([^\1])\1'
    Das ist aber laut RegExp-Syntax nicht machbar.

    Hat jemand eine Idee, wie ich das Pattern verbiegen muß um meine negierte Backreferenz nutzen zu können?
    (Ich bin nicht auf der Suche nach Lösungsvarianten ohne Regexp.)