正则表达式替换非转义行情

时间:2013-09-23 07:09:46

标签: php regex

在构建json字符串时遇到一些问题,我在数据库中发现了一些包含双引号的文本。我需要用它们的转义等价物替换引号。这有效:

function escape( $str ) {
    return preg_replace('/"/',"\\\"",$str);
}

但它没有考虑报价可能已被转义。如何修改表达式,使其仅适用于非转义字符?

4 个答案:

答案 0 :(得分:4)

你需要在这里使用负面的背后隐藏

function escape( $str ) {
    return preg_replace('/(?<!\\)"/',"\\\"",$str);
}

答案 1 :(得分:0)

首先尝试从所有转义的双引号中删除'\',而不是转义所有双引号。

str_replace(array('\"', '"'), array('"', '\"'), $str);

答案 2 :(得分:0)

尝试preg_replace('/([^\\\])"/', '$1\\"', $str);

答案 3 :(得分:0)

我相信this will work

正则表达式:

(?<!\\)((?:\\\\)*)"

代码:

$re = '/(?<!\\\\)((?:\\\\\\\\)*)"/';
preg_replace($re, '$1\\"', 'foo"bar'); // foo\"bar -- slash added
preg_replace($re, '$1\\"', 'foo\\"bar'); // foo\"bar -- already escaped, nothing added
preg_replace($re, '$1\\"', 'foo\\\\"bar'); // foo\\\"bar -- not escaped, extra slash added