Ihre Flucht ist ein bisschen aus. Sie scheinen JavaScript zu verwenden, und das Zeichenfolgenliteral wird in "\$(_POST|_SESSION|_GET)\[([^\'][0-9a-zA-Z _]+?[^\'])\]"
ausgewertet $(_POST|_SESSION|_GET)[([^'][0-9a-zA-Z _]+?[^'])]
.
Stattdessen sollten Sie verwenden "\\$(_POST|_SESSION|_GET)\\[([^'][0-9a-zA-Z _]+?[^'])\\]"
, was zu auswertet \$(_POST|_SESSION|_GET)\[([^'][0-9a-zA-Z _]+?[^'])\]
.
Der Grund dafür ist, dass Sie tatsächlich zwei Ebenen des Parsing haben, von denen jede ihre eigenen Escape-Regeln hat. Erstens haben Sie das JavaScript-Zeichenfolgenliteral, mit dem Sie Dinge wie \n
für eine neue Zeile umgehen können. Nicht erkannte Escape-Sequenzen wie "\["
werden jedoch lautlos verschluckt und produzieren [
. Die Regex-Engine sieht [
, dass der Beginn einer Zeichenklasse angezeigt wird.
Sie möchten, dass die Regex-Engine wörtliche Backslashes im Muster empfängt. Dazu müssen Sie zunächst eine JS-Zeichenfolge mit literalen Backslashes erstellen. Was bedeutet, dass Sie die Backslashes selbst im String-Literal entkommen müssen, also "\\"
produziert \
, zB "\\["
den String erzeugt \[
. Auf diese Weise erkennt die Regex-Engine \[
eine abgehackte (wörtliche) Klammer.
Die andere Sache ist, dass die einfachen Anführungszeichen nicht unbedingt mit Escapezeichen versehen werden müssen, da sie in regulären Ausdrücken keine besondere Bedeutung haben, und einfache Anführungszeichen in einer doppelten Anführungszeichenfolge werden von JS als normale Zeichen behandelt.
Es gibt eine andere Option, aber ich bin nicht sicher, ob DreamWeaver dies akzeptiert. JavaScript hat eine spezielle Regex-Literal-Syntax, sodass Sie nicht zuerst eine Zeichenfolge erstellen müssen. Wenn Sie diesen zusätzlichen Parsing-Schritt überspringen, vermeiden Sie tatsächlich die Notwendigkeit eines doppelten Fluchtens. Ein JS-Regex-Literal hat die Form /pattern/options
(Schrägstriche müssen escape sein, aber in diesem Muster gibt es keine). So kann Ihr Muster als ausgedrückt werden /\$(_POST|_SESSION|_GET)\[([^'][0-9a-zA-Z _]+?[^'])\]/
. Wieder einmal müssen die einfachen Anführungszeichen überhaupt nicht maskiert werden.
Wenn DreamWeaver die Regex-Literal-Syntax unterstützt, ist dies tatsächlich die bevorzugte Option.