Php 正则表达式-带负前瞻的转义

Php 正则表达式-带负前瞻的转义,php,regex,escaping,preg-replace,negative-lookahead,Php,Regex,Escaping,Preg Replace,Negative Lookahead,我有以下JSON编码的字符串: $json = '"|\t|\n|\\\u0027|\\\u0022|"'; 除了\\\u0022或\\\u0027之外,逃逸所有(已经)逃逸的字符/代码点的最有效方法是什么?我想用一个负前瞻正则表达式来使用preg\u replace(),但它没有像我预期的那样工作,输出应该是: $json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"'; 我在JSON-PHP-PCRE的海洋中迷失了方向,有人能帮帮我吗?我有点困惑于你到底想做什么,

我有以下JSON编码的字符串:

$json = '"|\t|\n|\\\u0027|\\\u0022|"';
除了
\\\u0022
\\\u0027
之外,逃逸所有(已经)逃逸的字符/代码点的最有效方法是什么?我想用一个负前瞻正则表达式来使用
preg\u replace()
,但它没有像我预期的那样工作,输出应该是:

$json = '"|\\\t|\\\n|\\\u0027|\\\u0022|"';

我在JSON-PHP-PCRE的海洋中迷失了方向,有人能帮帮我吗?

我有点困惑于你到底想做什么,但我可以用以下方法将你的输入转换为输出:

preg_replace('/\|\\([^\\])\|/', '\\\\\\$1|', $json);
注意:我不在电脑前,所以我无法验证这是否完美,但从这里看很好。

试试看

$result = preg_replace('/(?<!\\\\)\\\\(?!\\\\)/', '\\\\\\\\\', $subject);
$result=preg_replace('/(?)?

只有当一个
\
是单个的(即前面或后面都没有另一个
\
)时,它才会找到该
\
,并将其替换为
\\\

类似的内容可能在负前瞻的帮助下起作用:

<?php
  $json = '"|\t|\n|\\\u0027|\\\u0022|"';
  $s = preg_replace('~(\\\\)(?!(\\1|u002[27]))~', '$1$1$1', $json);
  var_dump($json);
  var_dump($s);
?>

你确定这就是你想要的输出吗?这对我来说没什么意义,我本以为会有类似
\\t\\n.
。你到底想做什么?@Justin:是的,我用的是
stripslashes()
在解码之前在其上,因此效果应该与您的完全相同,从转义的
\u002[27]中删除转义
codepoints是我的目标。@Marcel,@Unkwntech:你为什么这么说?我觉得很对。哇,你说得对。我认为它至少需要一个键,但当然你可以简单地指定一个字符串而不是一个对象。
string(25) ""|\t|\n|\\u0027|\\u0022|""
string(29) ""|\\\t|\\\n|\\u0027|\\u0022|""