Найти все шаблоны в строке PHP

Это моя строка

$str = '"additional_details":" {"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"}],';

Я хочу найти все шаблоны, которые начинаются с "{" и заканчивается "}",

Я пытаюсь это:

preg_match_all( '/"(\{.*\})"/', $json, $matches );
print_r($matches);

Это дает мне вывод:

Array
(
    [0] => Array
        (
            [0] => "{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"
        )

    [1] => Array
        (
            [0] => {"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}
        )

)

См. Ключ массива 1. Он дает все совпадения в одном ключе и другие детали.

Я хочу массив всех совпадений. подобно

Array
(
    [0] => Array
        (
            [0] => "{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"}],"additional_details":"{"mode_of_transport":"air"}"
        )

    [1] => Array
        (
            [0] => {"mode_of_transport":"air"},
            [1] => {"mode_of_transport":"air"},
            [2] => {"mode_of_transport":"air"}
        )

)

Что я должен изменить в моем образце.

Спасибо

1 ответ

Ты можешь использовать:

preg_match_all( '/({[^}]*})/', $str, $matches );
print_r($matches[1]);
Array
(
    [0] => {"mode_of_transport":"air"}
    [1] => {"mode_of_transport":"air"}
    [2] => {"mode_of_transport":"air"}
)
Другие вопросы по тегам