0

我想将主题字符串 'r r' 中的模式字符串 '/r/' 替换为预先确定的替换,例如 '"\\23"' 和 '[4]'。所以(只向您展示我的替换数组的一个子集)我尝试:

$subject = 'r r';
$replacements = array('"\\23"', '[4]');
$replacements = array_map('preg_quote', $replacements);
print_r($replacements);

foreach($replacements as $replacement){
    $subject = preg_replace('/r/', $replacement, $subject, 1);
}

echo $subject;

我想要的字符串是 '"\\23" [4]',但我得到的是 '"\23" \[4\]',它既缺少字符又具有附加字符。

PHP 是否有一个可以在这里工作的转义函数?我该怎么做呢?

注意:如果没有 preg_quote 行,结果是 '"" [4]'。

4

1 回答 1

0

preg_quote 函数只需要 preg_replace 的第一个参数,如果它应该被转义,所以删除它

替换r"\\23"您需要使用:

$subject = 'r r';
$replacements = array('"\\\\23"', '[4]'); // here is double escaping, but only in code, for input you do no need to escape anyhitng
foreach ($replacements as $replacement)
    $subject = preg_replace('/r/', addcslashes($replacement, '\\'), $subject, 1); // here is the addition of \ only to \, as it is required by preg_replace
echo $subject;

http://php.net/manual/en/function.preg-replace.php

要在替换中使用反斜杠,它必须加倍(“\\\\” PHP 字符串)。

于 2013-10-25T01:18:07.613 回答