3

通常のテキストと JSON が混在する巨大な文字列ダンプがあります。文字列ダンプから JSON オブジェクトを分離/削除し、テキストのみを取得したい。

以下に例を示します。

This is some text {'JSON':'Object'} Here's some more text {'JSON':'Object'} Yet more text {'JSON':'Object'} Again, some text.

私の目標は、次のようなテキスト ダンプを取得することです (基本的に JSON は削除されます)。

This is some text Here's some more text Yet more text Again, some text.

これをすべてPHPで行う必要があります。テキスト ダンプは常にランダムであり、JSON データ構造も同様です (ほとんどが深くネストされています)。ダンプは JSON で始まる場合とそうでない場合があり、文字列ダンプ内に複数の JSON オブジェクトが含まれる場合と含まれない場合があります。

文字列で使用しようとしjson_decodeましたが、結果は次のようになりますNULL

編集:アマルの答えは、私が望むものに本当に近いです(以下の2番目のコメントを参照):

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

ただし、ネストされたオブジェクトはまったく削除されません。例: 括弧内のデータ:[]または[{}]

申し訳ありませんが、私は正規表現の専門家ではありません。

私が扱っている文字列ダンプのより具体的な例が必要な人もいるかもしれません。したがって、要点を作成しました (これは静的データではないことに注意してください。ダンプ内のデータは常に異なります。上記の例は、使用している文字列を単純化したものです): https://gist.github.com /匿名/6855800

4

3 に答える 3

11

使用しようとして使用したコードを投稿してほしかったのですが、JSON_decodeまあ...

PHP では、ネストされたブレースに再帰的な正規表現を使用できます。

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

regex101 demo (青色でハイライトされた部分が削除されます)。

于 2013-10-06T16:31:16.650 に答える