web-nomad
web-nomad

Reputation: 6003

Find all patterns in a string php

This is my string.

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

I want to find all patterns that start with "{" and end with "}".

I am trying this:

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

It gives me an output of:

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"}
        )

)

See the array key 1. It gives all matches in one key and other details too.

I want an array of all matches. Like

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"}
        )

)

What should I change in my pattern.

Thanks

Upvotes: 1

Views: 61

Answers (1)

anubhava
anubhava

Reputation: 785008

You can use:

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"}
)

Upvotes: 1

Related Questions