2011-09-05 26 views
0

我正在使用PHP,並且我開發了一個用於清理JSON字符串的腳本。PHP正則表達式除數字和布爾值外的所有字符

該過程的一個步驟是防止數字和布爾值被明確地雙引號。

下面是我排除數字的正則表達式模式。

/\:[\s\n\t]*([^0-9\{\}\[\],\"]+)[\s\n\t]*/i 

但是,我試圖增強它,使它包含布爾值以及即真和假。沒有這個,任何布爾值將被雙引號(我想避免)。

任何想法,我可以改善上述正則表達式?

謝謝。

+0

你能描述一下你使用的是什麼嗎?由於php的'json_encode'不會用引號包裝一個真正的布爾值。 (請參閱:'echo json_encode(true);') – Yoshi

+0

一旦您擁有數組格式的變量(在json_decode之後),會不會更容易? – ajreal

+0

@Yoshi:這只是一個通用腳本,用於清理傳遞給json_decode之前格式不正確的JSON。有時,API和其他來源的JSON可能會有一些「螺絲鬆動」,所以這只是解決這個問題。 –

回答

1

您可以使用?!斷言來排除布爾值與您的角色類黑名單匹配。

/\:[\s\n\t]*(?!true|false)([^0-9\{\}\[\],\"]+)[\s\n\t]*/i 

順便說一句,字符類,因爲它將失敗的浮動。另外,我並不完全相信你的「消毒」方法。看來你只能在這裏後處理一些裸露的數組屬性。 (如果它們由多個不包含在dquotes中的單詞組成,那麼它會失敗)。

+0

謝謝馬里奧,我現在就試試看。關於您對「消毒」方法的評論,這種單一模式是十一部分過程的一部分。在使用JSON文件實際清理之前,我正在使用其他11種正則表達式對JSON文件執行各種操作。我現在也會研究float問題。我會盡快給您回覆。 –

+0

好的。這工作完美。非常感謝。漂浮物也可以。乾杯。 –

相關問題