Ich habe Benutzereingaben, bei denen einige Tags in eckigen Klammern zulässig sind. Ich habe bereits das Regex-Muster geschrieben, um zu finden und zu validieren, was in den Klammern steht.
Im Benutzereingabefeld konnte die öffnende Klammer ([) mit Backslash versehen werden, auch Backslash konnte mit einem anderen Backslash (\) versehen werden. Ich brauche ein Look-Back-Sub-Pattern, um eine ungerade Anzahl aufeinanderfolgender Backslashes vor der öffnenden Klammer zu vermeiden.
Im Moment muss ich mich mit so etwas beschäftigen:
%Vor%Es funktioniert gut, aber Problem ist, dass dieser Code immer noch mögliche Paare von aufeinander folgenden Backslashes vor Klammern (auch sie sind ausgeblendet) und Look-Behind nur überprüft, ob es einen anderen Backslash angehängt an Paare (oder direkt zu öffnen ist) -Klammer). Ich muss sie alle nach innen vermeiden, wenn möglich.
Ich arbeite mit PHP PCRE
Beim letzten Mal hat PHP keine Look-Behinds variabler Länge unterstützt. Deshalb können Sie die triviale Lösung (?<![^\](?:\\)*\)
nicht verwenden.
Die einfachste Problemumgehung wäre, das gesamte Ding, nicht nur den Klammerteil, einfach anzupassen:
%Vor% Der Unterschied besteht darin, dass Sie jetzt, wenn Sie diese Regex in einem preg_replace
verwenden, daran denken müssen, die Ersetzungszeichenfolge durch voranzustellen, um die Backslashes wieder herzustellen.
Du könntest es ohne irgendwelche Look-Behinds machen ( die (\\|[^\])
Alternation frisst alles außer einem einzigen Schrägstrich ):
Tags und Links php regex pcre lookbehind negative-lookbehind