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