[英]Regex to replace non escaped Quotes
在構建json
字符串時遇到一些問題,我在數據庫中發現了一些包含雙引號的文本。 我需要用它們的轉義等價物替換引號。 這有效:
function escape( $str ) {
return preg_replace('/"/',"\\\"",$str);
}
但它沒有考慮到報價可能已被轉義。 如何修改表達式,使其僅適用於非轉義字符?
你需要在這里使用負面的lookbehind
function escape( $str ) {
return preg_replace('/(?<!\\)"/',"\\\"",$str);
}
首先嘗試從所有轉義的雙引號中刪除'\\',而不是轉義所有雙引號。
str_replace(array('\"', '"'), array('"', '\"'), $str);
嘗試preg_replace('/([^\\\\\\])"/', '$1\\\\"', $str);
我相信這會奏效
正則表達式:
(?<!\\)((?:\\\\)*)"
碼:
$re = '/(?<!\\\\)((?:\\\\\\\\)*)"/';
preg_replace($re, '$1\\"', 'foo"bar'); // foo\"bar -- slash added
preg_replace($re, '$1\\"', 'foo\\"bar'); // foo\"bar -- already escaped, nothing added
preg_replace($re, '$1\\"', 'foo\\\\"bar'); // foo\\\"bar -- not escaped, extra slash added
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.