1

可能重复:
PHP:正则表达式忽略引号内的转义引号
如何修复 PHP 中格式错误的 JSON?

我的数据看起来像这样:

"manager1": "Richard "Dick" Smith, MD, MBA",

但它需要看起来像这样才能与 JSON 一起使用:

"manager1": "Richard \"Dick\" Smith, MD, MBA",

注意:不同之处在于反斜杠仅用于 Dick 昵称的内部双引号,而字符串的其余部分保持不变。

我在处理用逗号分隔的证书(MD、MBA)时遇到了问题。如何在 PHP 中使用正则表达式做到这一点,同时只对内部双引号进行反斜杠,同时保留字符串的其余部分?谢谢!

这不是 如何在 PHP 中修复格式错误的 JSON? 因为该例程无法处理凭据中的额外逗号。

4

2 回答 2

0

我建议你这样做:

//suppose your data is in the file named "data.txt". We read it in a variable

$fh = fopen("data.txt");
$res = '';
while (($line = fgets($fh)) !== false) {
   $txt = explode(': ', $line);
   $txt[1] = trim($txt[1], '",'); 
   //now $txt[1] holds the the data with internal quotes but without external quotes
   $txt[1] = preg_replace('@"@', '\"',  $txt[1]);
   //put leading and ending quotes back and join everything back together
   $txt[1] = '"'.$txt[1].'",';
   $res .= implode(': ', $txt);

}

fclose($fh);

//now echo the result with the all internal quotes escaped
echo $res;

我认为像上面这样的东西应该适合你。

于 2012-11-06T15:16:50.090 回答
0

以下正则表达式模式:

 /^\s+"[a-z0-9_"]+": "([^"]*".*)",?$/mi

为我做的。请参阅如何更正 php 中的无效 JSON?

于 2012-11-07T15:29:46.297 回答