Php 正则表达式替换字符串中的所有双引号;至\“;转换为有效的json字符串

Php 正则表达式替换字符串中的所有双引号;至\“;转换为有效的json字符串,php,regex,preg-replace,double-quotes,Php,Regex,Preg Replace,Double Quotes,我有一个无效的json字符串,如{“subject”:“tv 60”new;“body”:“联系我了解详细信息”} 我尝试使用php preg_replace使这个json字符串有效,但失败了 请帮助我创建一个正则表达式来替换“to/” 提前感谢。$string=~/(?!除非您使用正则表达式在插入JSON对象之前验证键/值,否则使用正则表达式不是验证给定JSON对象的好方法 $string =~ /(?!<[\{:,])\"(?!\s*[:,\}]/\\"/g 即使您试图在插入时进

我有一个无效的json字符串,如{“subject”:“tv 60”new;“body”:“联系我了解详细信息”}

我尝试使用php preg_replace使这个json字符串有效,但失败了

请帮助我创建一个正则表达式来替换“to/”


提前感谢。

$string=~/(?!除非您使用正则表达式在插入JSON对象之前验证键/值,否则使用正则表达式不是验证给定JSON对象的好方法

$string =~ /(?!<[\{:,])\"(?!\s*[:,\}]/\\"/g  

即使您试图在插入时进行验证,似乎regex的功能过于强大,相反,您可以使用各种帮助器方法,或者简单地遍历原始字符串,并在必要时进行替换。

假设{',':'和','字符在JSON和双引号之间没有任何尾随空格,解决方案可以是:

$sanitizedJsonString = preg_replace('/([^:,{])"([^:,}])/', "$1".'\"'."$2", $yourMalformedJsonString);
它会查找所有不带“{'、“:”或“,”字符且后面不带“:”、“,”或“}”字符的块引号,并将其替换为“\”字符。


希望它能解决您的问题,但是请记住,在某些特殊情况下,这种方法会失败:例如,如果在格式错误的JSON中,块引号中有一个单词,后面跟一个逗号,如下所示:

{"subject":"tv 60" new","body":"contact "me", for detail"}
您仍然会有一个无效的JSON:

{"subject":"tv 60\" new","body":"contact \"me", for detail"}

如果你需要一个更可靠的解决方案,我同意Steve p的观点,你必须实现一个脚本来解析你的字符串,并在需要时替换块引号。

我在你的JSON中没有看到
到/
。。这个网站通常是Regex的一个很好的资源:Regex不够聪明,无法知道有效的JSON语法。@Thomas我尝试重新设置它主题的gex:tv 60“==>tv 60\”您需要的确切输出是什么?