johny7: REGEX Backslash, "Einer kam durch"

Beitrag lesen

Moin allerseits,

Mir war da tatsächlich noch ein Fehler unterlaufen. Da du den normalen Slash als Begrenzungszeichen für das Muster nimmst, muss der mMn in der Zeichenklasse auch maskiert werden.

$search=preg_replace("/[,;\\\\:.\\/]/" , " " , $search);

Damit der Maskierungs-Backslash aber durch PHP durchschlüpfen kann, muss er seinerseits maskiert werden.

Nein. Ich habe es mit der anderen Variante probiert: es läuft. Du musst doch den normalen Slash in PHP nicht maskieren. Aber im REGEX schon. Deshalb reicht ein Backslash vor dem Slash. PHP gibt ihn auch als einen Slash an REGEX weiter.

Einfacher würde es aussehen, wenn du
    $search=preg_replace('/[,;\:.\/]/' , ' ' , $search);

Das ist mir jetzt auch interessant: Wenn ich einfache Anführungszeichen verwende, brauche ich den Backslash nicht mehr zu maskieren? Ich dachte, die REGEX erfordert immer, dass ich den Backslash maskiere. Oder geht das hier, weil dem Backslash ein : folgt, welches nicht maskiert werden braucht?

oder
    $search=preg_replace('~[,;\:./]~' , ' ' , $search);
schreiben würdest.

Ach, ich kann anstelle der / einfach ~ verwenden? Könnte ich theoretisch jeden Buchstaben verwenden?

Und das läuft dann unter dem Motto: "Einer kam durch".
Das heißt?

Na, von vier Backslashes kommt nachher nur einer bei der Auswertelogik an.

cool

Grüße, JN

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de