使用 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 有效和无效时,简单地为每个转义“层”加倍可能比学习更安全。
我有下面的代码,我需要更改什么才能得到结果 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);
作为 '\\\'
;这是有效的,因为正则表达式引擎看到 \\
,它是一个转义的反斜杠 (\
),后跟一个不能转义任何内容的反斜杠 (\
),因为它是细绳。不过,当这个 short-cut 有效和无效时,简单地为每个转义“层”加倍可能比学习更安全。