Beim Testen einer Antwort für die Frage eines anderen Benutzers habe ich etwas gefunden, das ich nicht gefunden habe verstehen. Das Problem bestand darin, alle literalen Zeichen \t
\n
\r
aus einer Zeichenfolge mit einem einzelnen Leerzeichen zu ersetzen.
Nun, das erste Muster, das ich ausprobiert habe, war:
%Vor%was überraschenderweise nicht funktioniert hat. Ich habe das gleiche Muster in Perl versucht und es hat gut funktioniert. Nach einigem Ausprobieren fand ich, dass PHP 3 oder 4 umgekehrte Schrägstriche für dieses Muster benötigt, wie in:
%Vor%oder
%Vor%diese Muster - zu meiner Überraschung - funktionieren beide. Warum sind diese zusätzlichen Backslashes notwendig?
Sie benötigen 4 umgekehrte Schrägstriche, um in Regex 1 darzustellen, weil:
"\\" -> \
) \ -> \
) Aus dem PHP-Dokument,
Wenn Sie ein anderes Zeichen ausschließen, wird der Backslash zu 1
Also für \\[
,
\
zu entfernen, eine bleibt, weil \[
ungültig ist ( "\\[" -> \[
) \[ -> \[
) Ja, es funktioniert, aber keine gute Praxis.
Es funktioniert in Perl, weil Sie das direkt als Regex-Muster /(?:\[trn])+/
aber in PHP, müssen Sie als Zeichenfolge übergeben, so müssen zusätzliche Escaping für Backslash selbst.
%Vor%Die Regex \, um eine einzelne zu finden Backslash würde '/ \\\\' als ein PHP-Preg-String
Der reguläre Ausdruck ist nur /(?:\[trn])+/
. Aber da Sie die Backslashes auch in String-Deklarationen umgehen müssen, muss jeder Backslash mit \
:
Nur drei Backspaces funktionieren auch, weil PHP die Escape-Sequenz \[
nicht kennt und ignoriert. So wird \
\
, aber \[
bleibt \[
.