2017-03-28 3 views
0

Diese Frage ist RegEx: Grabbing values between quotation marks ZusammenhangRegEx: Ergreifung Werte zwischen nicht entgangen Anführungszeichen

Die RegEx der beste Antwort

(["'])(?:(?=(\\?))\2.)*?\1 

mit dem

getestet

Debuggex Demo

passt auch Strings das fängt mit einem geflüchteten doppelten Zitat an. Ich habe versucht, die Definition zu erweitern, um mit einem negativen Lookbehind zu arbeiten.

(["'](?<!\\))(?:(?=(\\?))\2.)*?\1 

Debuggex Demo

aber nicht alles in dem abgestimmten Muster ändern. Vorschläge zum Ausschließen von Singe-Anführungszeichen als Startmuster?

Ich möchte dies als Hervorhebungsmuster in Nedit verwenden, die Regex-Lookbehind unterstützt.

Beispiel für gewünschte Anpassung:

<p> 
 
    <span style="color: #ff0000">"str1"</span> notstr 
 
    <span style="color: #ff0000">"str2"</span> 
 
    \"notstr <span style="color: #ff0000">"str4"</span> 
 
</p>

+1

Diese Art von Eingabezeichenfolgen sollte niemals auftreten. Die Regex kann wie folgt aussehen: (?

+0

vielen Dank, mein Rookie Fehler in Bezug auf die Lookobehind Position Ich denke ... – muluman88

Antwort

1

Verwendung negativer lookbehind für den umgekehrten Schrägstrich nicht durch einen anderen umgekehrten Schrägstrich, d.h.

(?<!(?<!\\)\\)["'] 

löst das Problem:

((?<!(?<!\\)\\)["'])(?:(?=(\\?))\2.)*?(?<!(?<!\\)\\)\1 

Demo.

Sie sollten diesen Ansatz sehr vorsichtig sein, weil in der Regel regex für das Parsen von Eingaben in Markup-Syntax nicht ein gutes Werkzeug ist. Es wäre besser, wenn Sie einen Parser in Originalgröße verwenden und dann Regex optional auf Teile anwenden, die Sie zurück erhalten.

+0

danke! Ich war zu dumm, um den Lookbehind an der richtigen Stelle zu setzen ... – muluman88

+1

Nein, tut es nicht tatsächlich lösen das Problem, weil es eine gültige Übereinstimmung fehlschlagen wird, wenn ein Zitat mit einem Escaped Backslash vorangestellt wird, der einen umgekehrten Schrägstrich darstellt. –

+1

@ WiktorStribiżew Sie haben Recht, ich habe nicht daran gedacht, dem Escape-Zeichen selbst zu entgehen Negatives Look-Behind in einem negativen Look-Behind konnte für einzelne Vorkommnisse von maskierten Backslashes patchen.Natürlich wird es jetzt für maskierte Backslashes, gefolgt von nicht-maskierten Backslashs, fehlschlagen, aber Regex's Unfähigkeit zu zählen setzt Grenzen wie weit das Ganze ist Ding kann geschoben werden – dasblinkenlight

Verwandte Themen