簡體   English   中英

正則表達式替換非轉義行情

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM