Помогите составить регулярное выражение для парсинга json в зависимости от переменной на PHP

Как правильно при помощи регулярных выражений на PHP извлечь из json значение конкретного ключа, зная значение другого ключа? Имеется некоторая переменная $request, в которую можно записать, например, image1, и надо записать в другую переменную $result значение ключа value, т.е. blue. (см. пример ниже)

  {
   "value": "blue",
   "name": "image1"
  },
  {
   "value": "green",
   "name": "image2"
  },
  {
   "value": "red",
   "name": "image3"
  }

Помогите составить такое регулярное выражение.

 <?php 

$data = '{   "value": "blue",   "name": "image1"  },  {   "value": "green",   "name": "image2"  },  {   "value": "red",   "name": "image3"  }';

preg_match(('?<="value": ").*(?="[^}]+?image3'), $data, $matches);

print_r($matches[1]);

 ?>

Ответы (2 шт):

Автор решения: dIm0n

Находит значение ключа value, когда далее есть какой-то image:

(?<="value":\h").*(?="[^}]+?image)

Тест https://regexr.com/5a302

{

"value": "blue",

"name": "image1"

},

{

"value": "green",

"name": "image2"

},

{

"value": "red",

"name": "image3"

}

Сгенерированный код:

$re = '/(?<="value": ").*(?="[^}]+?image)/m';
$str = '  {
   "value": "blue",
   "name": "image1"
  },
  {
   "value": "green",
   "name": "image2"
  },
  {
   "value": "red",
   "name": "image3"
  }';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
→ Ссылка
Автор решения: xRef

Можно же просто использовать json_decode и foreach:

$data = '[{   "value": "blue",   "name": "image1"  },  {   "value": "green",   "name": "image2"  },  {   "value": "red",   "name": "image3"  }]';
$arr = json_decode($data, true);
$value = "";
foreach ($arr as $row)
{
    if ($row["name"] == "image1")
    {
        $value = $row["value"];
        break;
    }
}
echo $value;   // blue
→ Ссылка