无法使用 PHP 中的 preg_replace 正确转义未转义的特殊字符

Unable to properly escape unescaped special characters using preg_replace in PHP

我正在尝试使用 preg_replace 用反斜杠转义多行字符串中的所有特殊字符,但是这个字符串被反复传出并传回,以避免我想要的任何混淆使用只转义未转义的特殊字符的正则表达式(也不包括空格、换行符、回车 returns 和转义字符本身)。即:

$foo $bar :\:\n

应该转义为:

$foo $bar \:\:\n

并且没有像下面这样转义两次:

$foo \$bar \:\:\n

我已经接近以下内容:

preg_replace("/([^\\])([^a-z0-9\\ \r\n])/i","\\",$input);

但是当两个相同的特殊字符依次出现时,只有两个中的第一个被转义。

例如:

.....

变为:

\..\..

但我真的很想:

\.\.\.\.

对于这个荒谬的问题,或者我做的任何愚蠢的事情,我们深表歉意!提前致谢:)

尝试在正则表达式中使用否定回顾。像这样:

preg_replace("/(?<!\\)([^a-z0-9\\ \r\n])/i","\\",$input)