我正在使用PHP,並且我開發了一個用於清理JSON字符串的腳本。PHP正則表達式除數字和布爾值外的所有字符
該過程的一個步驟是防止數字和布爾值被明確地雙引號。
下面是我排除數字的正則表達式模式。
/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
但是,我試圖增強它,使它包含布爾值以及即真和假。沒有這個,任何布爾值將被雙引號(我想避免)。
任何想法,我可以改善上述正則表達式?
謝謝。
我正在使用PHP,並且我開發了一個用於清理JSON字符串的腳本。PHP正則表達式除數字和布爾值外的所有字符
該過程的一個步驟是防止數字和布爾值被明確地雙引號。
下面是我排除數字的正則表達式模式。
/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
但是,我試圖增強它,使它包含布爾值以及即真和假。沒有這個,任何布爾值將被雙引號(我想避免)。
任何想法,我可以改善上述正則表達式?
謝謝。
您可以使用?!
斷言來排除布爾值與您的角色類黑名單匹配。
/\:[\s\n\t]*(?!true|false)([^0-9\{\}\[\],\"]+)[\s\n\t]*/i
順便說一句,字符類,因爲它將失敗的浮動。另外,我並不完全相信你的「消毒」方法。看來你只能在這裏後處理一些裸露的數組屬性。 (如果它們由多個不包含在dquotes中的單詞組成,那麼它會失敗)。
謝謝馬里奧,我現在就試試看。關於您對「消毒」方法的評論,這種單一模式是十一部分過程的一部分。在使用JSON文件實際清理之前,我正在使用其他11種正則表達式對JSON文件執行各種操作。我現在也會研究float問題。我會盡快給您回覆。 –
好的。這工作完美。非常感謝。漂浮物也可以。乾杯。 –
你能描述一下你使用的是什麼嗎?由於php的'json_encode'不會用引號包裝一個真正的布爾值。 (請參閱:'echo json_encode(true);') – Yoshi
一旦您擁有數組格式的變量(在json_decode之後),會不會更容易? – ajreal
@Yoshi:這只是一個通用腳本,用於清理傳遞給json_decode之前格式不正確的JSON。有時,API和其他來源的JSON可能會有一些「螺絲鬆動」,所以這只是解決這個問題。 –