使用 preg_replace() 在每个匹配前添加两个反斜杠

Use preg_replace() to add two backslashes before each match

我有下面的代码,我需要更改什么才能得到结果 mercedes\-benz 而不是 mercedes\-benz

$value = 'mercedes-benz';
$pattern = '/(\+|-|\/|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\)/';
$replace = '\\';
echo preg_replace($pattern, $replace, $value);

我不能确定我是否 100% 翻译了您最初的尝试,但这适用于您的单独样本输入。

该模式使用字符 class 和大括号量词来提高可读性和简洁性。使用 \K 消除了在替换字符串中引用的需要。

代码:(Demo)

$value = 'mercedes-benz';
$pattern = '`&{2}|\|{2}|[-+/!(){}[\]^"~*?:\\]\K`';
$replace = '\\\';
echo preg_replace($pattern, $replace, $value);

最终,诀窍是继续向替换项添加反斜杠以使其显示出来。

欢迎体验“倾斜牙签综合症”的乐趣 - 反斜杠是一种常用的转义字符,经常需要多次转义。让我们看看你的情况:

  • 所需的输出(可能是因为其他一些转义上下文):\
  • 使用额外的 \ 对每个 \ 进行转义,以便在 PCRE 正则表达式引擎中使用:\\
  • 转义每个 \ 那里 用于 PHP 字符串:\\\\
$value = 'mercedes-benz';
$pattern = '/(\+|-|\/|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\)/';
$replace = '\\\\';
echo preg_replace($pattern, $replace, $value);

作为 ,在某些情况下,您可以使用 6 而不是 8 反斜杠,例如替换'\\\';这是有效的,因为正则表达式引擎看到 \\,它是一个转义的反斜杠 (\),后跟一个不能转义任何内容的反斜杠 (\),因为它是细绳。不过,当这个 short-cut 有效和无效时,简单地为每个转义“层”加倍可能比学习更安全。