簡體   English   中英

多次轉義時替換所有反斜杠

[英]replace all backslashes when they are escaped multiple times

我在開發的應用程序中犯了一個錯誤,結果發現有些文本的倍數是雙引號的轉義符,就像這樣

我們將從構建酒吧的正面和側面開始。 我們將首先使用2 \\\\\\\\\\\\\\\\“” x 4 \\\\\\\\\\\\\\\\“”為正面和側面創建框架,然后將刨花板面板固定在框架上。 此項目中的桿高為42 \\\\\\\\\\\\\\\\“”寬60 \\\\\\\\\\\\\\\\“”寬為40 \\\\\\\\\\\\\\\\“”。您將在其中鑽幾個螺釘為了簡化此過程,請先使用Dremel旋轉工具和150 1/8 \\\\\\\\\\\\\\\\“鑽頭在框架中的螺釘上鑽一些定位孔。

我正在尋找一種方法來在數據庫中進行更新,以快速刪除所有這些斜杠,到目前為止,我的想法是使用正則表達式,例如

for each($records as $record){
  $record->description = preg_replace(*/some patter here/*, $record->description);
  $record->save();
}

但是,我很難找到正確的模式,因此也許有人可以為您提供幫助,或者,如果有一種更簡便或更好的方式來更新這些記錄,我將非常感謝您的幫助!

您幾乎永遠不應該在數據庫中存儲反斜杠轉義的內容。 要清理這些,您可能需要類似以下內容:

preg_replace( "/\\\\{2,}/", "", $record->description );

這將用空字符串替換2個或更多反斜杠的序列。 如有必要,您可以使其更具體-使其僅匹配那些反斜杠序列,后跟雙引號字符:

preg_replace( '/\\\\{2,}"/', '"', $record->description );

那就是如果您想通過PHP做到這一點。 您的數據庫引擎可能具有內置的正則表達式替換功能,該功能允許您僅使用查詢來執行更新,並且如果需要的話,可能會提高性能。 模式可能是相同的。

我剛剛注意到您的MySQL標簽。 顯然,MySQL沒有內置的regex替換功能。 請參閱如何在MySQL中執行正則表達式替換?

我的建議是完全消除反斜杠轉義符,然后在輸出時根據需要進行轉義,除非有充分的理由存儲轉義的內容。 您當然可以更改替換字符串,以單個反斜杠或任何您想要的字符替換那些序列。

preg_replace("/([\\]){2,}/", "\\", $record->description);

應該可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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