2015-07-04 36 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

谢谢,这是正是我一直在寻找! –