2015-07-04 35 views
1

我試圖抓取一個.JSON文件,但是返回的文件返回1個.json文件中的多個JSON對象,導致無效的json文件。我試圖通過在json文件之後添加[JSON文件和a之前]來解決此問題。然後使用正則表達式在正確的地方添加逗號。PHP Regex Negative Lookahead with進入

這是正則表達式

[{"status":"success"} 

{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"} 

{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"} 

] 

我創建了下面的正則表達式前檔:}(?!\s,|\s])。 我遇到的問題是,它仍然在最後}添加一個,即使它後面跟着一個]。

什麼我越來越:

[{"status":"success"}, 

{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}, 

{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}, 

] 

預期結果:

[{"status":"success"}, 

{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}, 

{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"} 

] 

回答

1

\s*您正則表達式替換\s因爲\s將匹配單個空格字符,其中\s*將匹配零個或多個空間字符。

}(?!\s*[,\]]) 

DEMO

$re = "/}(?!\\s*[,\\]])/m"; 
$str = "[{\"status\":\"success\"}\n\n{\"values\":{\"cpu\":26.5152886753948387,\"ram\":0.8452846061135513},\"origin\":\"core\",\"type\":-1,\"uuid\":\"0000-e8-de-27-176d10\"}\n\n{\"values\":{\"cpu\":25.5839236550189568,\"ram\":0.8452846061135513},\"origin\":\"core\",\"type\":-1,\"uuid\":\"0000-e8-de-27-176d10\"}\n\n]"; 
$subst = "},"; 
$result = preg_replace($re, $subst, $str); 
+1

謝謝,這是正是我一直在尋找! –