繁体   English   中英

正则表达式 - 逃避负面前瞻

[英]Regex - Escape with Negative Lookahead

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

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

除了\\\\"\\\\\' \\\\"之外 ,最有效的方法是逃避所有 (已经)转义的字符/代码点? 我虽然使用带有负前瞻正则表达式的preg_replace()但是它没有按照我的预期工作,输出应该是:

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

我在JSON-PHP-PCRE逃离的这片海洋中感到迷茫,有人可以帮助我吗?

这样的事情可能会在负面前瞻的帮助下起作用:

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

OUTPUT

string(25) ""|\t|\n|\\u0027|\\u0022|""
string(29) ""|\\\t|\\\n|\\u0027|\\u0022|""

我对你想要做的事情感到有点困惑,但是我可以将你的输入转换为你的输出:

preg_replace('/\|\\([^\\])\|/', '\\\\\\$1|', $json);

注意:我不在我的电脑上,所以我无法确认这是完美的,但从这里看起来很不错。

尝试

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

这个发现一个\\仅当它是单(即,既不之前也不是由另一随后\\ ),并用其替换\\\\\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM