[英]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);
?>
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.