PHP:如何从字符串转储中提取JSON字符串

Jam*_*ine 3 php regex string json

我有一个巨大的字符串转储,包含常规文本和JSON的混合.我想从字符串转储中分离/删除JSON对象并仅获取文本.

这是一个例子:

This is some text {'JSON':'Object'} Here's some more text {'JSON':'Object'} Yet more text {'JSON':'Object'} Again, some text.
Run Code Online (Sandbox Code Playgroud)

我的目标是获得一个看起来像这样的文本转储(基本上删除了JSON):

This is some text Here's some more text Yet more text Again, some text.
Run Code Online (Sandbox Code Playgroud)

我需要在PHP中完成所有这些操作.文本转储始终是随机的,JSON数据结构也是随机的(大部分都是深度嵌套的).转储可能是也可能不是以JSON开头,它可能包含也可能不包含字符串转储中的多个JSON对象.

我已尝试json_decode在字符串上使用但结果最终为NULL

编辑:Amal的答案非常接近我想要的(见下面的第2条评论):

$str = preg_replace('#\{.*?\}#s', '', $str);

但是,它根本没有摆脱嵌套对象; 例如括号内的数据:[][{}]

对不起,我不是正则表达式的专家.

我意识到你们中的一些人可能需要一个我正在处理的字符串转储的更具体的例子; 因此我创建了一个要点(请注意,这不是静态数据;转储中的数据将始终不同;上面的示例只是简化了我正在使用的字符串):https://gist.github.com /匿名/ 6855800

Jer*_*rry 8

我希望你发布你在尝试中使用的代码,JSON_decode但是哦......

您可以在PHP中使用递归正则表达式嵌套大括号:

$res = preg_replace('~\{(?:[^{}]|(?R))*\}~', '', $text);
Run Code Online (Sandbox Code Playgroud)

regex101演示(将以蓝色突出显示的部分将被删除).