Jörg Reinholz: Backslash entfernen

Beitrag lesen

was dedlfix oben geschrieben hat unterschreibe ich mit. Da gibt es einen Haufen Kontext-Wechsel, der kaum noch zu durchschauen ist. Auch das regex-Basteln will gelernt sein....

Du hast:

"

Du kannst das in einen String packen mit

A)
'\"' - der erste Backslash maskiert den zweiten.

ODER

B)
"\"" - der erste Backlslash maskiert den zweiten, der zweite das doppelte Anführungszeichen - das ja sonst den String begrenzen würde.

Ich habe die regsearch mit '/\(")|\\(')/' gebaut weil die Quotas ja ausgegeben werden sollen. Die geklammerten Ausdrücke werden dann in $1 in $99 gespeichert.

Nur für den Regex muss da nochmals maskiert werden.

Wenn Du schon partout einen (teuren) regex verwenden willst, warum nicht in einem Schritt?:

<?php  
$str='foo\\\'bar\\"';  
echo 'Kontrolle vor Ersetzen : '. $str , "    <br>\n";  
$regsearch='/\\\(")|\\\\(\')/';  
$str=preg_replace ($regsearch , '$1$2', $str);  
echo 'Kontrolle nach Ersetzen: [/\\\\\(")|\\\\\\\\(\'/)] : ', $str, "    <br>\n";  
?>

Ausgabe:

Kontrolle vor Ersetzen : foo'bar"    <br>
Kontrolle nach Ersetzen: [/\(")|\\('/)] : foo'bar"    <br>

Das kann man noch interessanter haben (wenn man es richtig machen will) und auch noch jeweils noch doppelte Backlashs durch einfache ersetzen will... einfacher ist das aber wohl mit:

<?php  
$str='foo\\\'bar\\"baz\\\\potz\\\\\\\\blitz\\\\\\\\\\\\donnerwerter\\\\\\\\\\\\\\\\';  
echo 'Kontrolle vor Ersetzen : '. $str , "    <br>\n";  
$ar_search=array('\\\\', "\\'", '\\"');  
$ar_replace=array('\\',"'", '"');  
$str=str_replace($ar_search,$ar_replace,$str);  
echo 'Kontrolle nach Ersetzen mit str_replace: ', $str, "    <br>\n";  
?>

Ausgabe:

  
Kontrolle vor Ersetzen : foo\'bar\"baz\\potz\\\\blitz\\\\\\donnerwerter\\\\\\\\    <br>  
Kontrolle nach Ersetzen mit str_replace: foo'bar"baz\potz\\blitz\\\donnerwerter\\\\    <br>

Jörg Reinholz