Angeblich unclosed character class

nhoj

Mitglied
PHP:
$string = "This ' is a string \\\\' used to test \\' if the regex works.";
$string = preg_replace("/(?=[^\\](\\.)*)'/","\\'",$string);

Vielleicht seh ich gerade den Wald vor lauter Bäumen nicht, aber PHP will mir doch weiss machen, dass die character class nicht geschlossen sei. Ziel der Regexp ist es, den String so zu escapen, dass man ihn zwischen einfache Hochkommata ' schreiben kann.

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 19
 
Wie die Fehlermeldung sagt, wird die schliessende "]" nicht gefunden. Bei deinem Regex innerhalb der [] fehlt also anscheinend ein "\". Beim testen hab ich einfach mal einen hinzugefügt und der Regex wurde angewandt.

Eine Frage nebenbei: wurde addslashes/stripslashes nicht das gleiche bewirken? Plus es könnte schneller sein bei grösseren Texten als ein regulärer Ausdruck
PHP:
$string1 = "This ' is a string \\\\' used to test \\' if the regex works.";
$string = preg_replace("/(?=[^\\\](\\.)*)'/","\\'",$string1);
echo $string;
echo "\n\n";
echo addslashes(stripslashes($string1));
echo "\n";
 
Hatte ich auch schon probiert, dann funktioniert die regexp aber nicht mehr richtig. addslashes kann ich in meinem Fall nicht verwenden, da ich nur dann die ' escapen möchte, falls sie noch nicht escaped sind.
 
Zurück