簡體   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