LoginSignup
1

More than 3 years have passed since last update.

文字列から、JSONオブジェクトを正規表現で抽出

Posted at

こんにちは。

文字列からJSONオブジェクトを正規表現で抽出したくなった事ってありませんか?

例えばAPIから返ってきたレスポンスが、下のような文字列だったとします。

string(102) "[
  {
    "id": 230,
    "content": "ブレイクアウトルーム",
  },
  {
    "id": 100,
    "content": "zoom",
  }
]"

JSON形式の部分だけ抽出して配列に代入できたら、操作が楽ですよね。

やってみると意外と大変だったので、備忘録として書いておきます。

サンプルコード


$pattern = '/\{[\s\S]*?\}/';
preg_match_all($pattern, $response, $matches );

抽出結果

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(59) "{
    "word_id": 230,
    "surface_form": "ブレイクアウトルーム",
  }"
    [1]=>
    string(48) "{
    "word_id": 100,
    "content": "zoom",
  }"
  }
}

各配列の要素は、文字列ですがPHPでは、json_decode($matches[0][0], true)を使うと、連想配列に変換できます。

正規表現

ポイントは、正規表現の書き方です。

'/\{[\s\S]*?\}/'

説明

[\s\S]

改行とそれ以外の文字にマッチ。
- \s :空白、タブ、フォーム フィードなどの任意の空白文字
- \S:空白文字以外の任意の文字

*

直前の文字に0回以上マッチ。

?

  • 最短マッチ。デフォルトでは最長マッチなので、全てのオブジェクトが一つの要素として取れてしまう。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1