用引号括起的字符替换转义字符

replace escaped characters with characters surrounded by quotes

我正在尝试通过一个字符串进行搜索替换,该字符串可能包含以反斜杠开头的任意数量的字符,并生成相同的字符串,但删除了反斜杠,并且这些字符被单引号括起来。

例如: ab c\d\e fg \h ij

应该产生 ab c'de' fg 'h' ij

是否可以用一个 preg_replace 来做到这一点?

你不能用preg_replace (因为你必须处理未知次数的重复),你必须用preg_replace_callback来找到所有的序列。然后回调函数删除反斜杠和 returns 引号之间的结果:

$str='ab c\d\e fg \h ij';

echo preg_replace_callback('~(?:\\.)+~', function ($m) {
    return "'". str_replace('\', '', $m[0]) . "'";
}, $str);