Захват текста между квадратными скобками после подстроки в PHP

У меня есть строка вроде ниже, которая поступает из БД.

$temp=Array(true); if($x[211] != 15) $temp[] = 211; if($x[224] != 1) $temp[] = 211; if(sizeof($temp)>1) { $temp[0]=false; } return $temp; 

Мне нужно найти все значения в квадратных скобках, за которыми следует переменная $ x. Т.е. 211 и 224.

Я попробовал под кодом, который я нашел на этом веб-сайте, в качестве ответа, но он возвращает все значения в квадратной скобке, включая следующую переменную temp.

 preg_match_all("/\[(.*?)\]/", $text, $matches); print_r($matches[1]); 

Пожалуйста, дайте мне знать, как я могу получить желаемые результаты?

RegEx

 (?<=\$x\[).*(?=\]) 

демонстрация

 $re = "/(?<=\$x\[).*(?=\])/"; $str = "Sample String"; preg_match_all($re, $str, $matches); 

объяснение

  • LookBehind – шаблон соответствия должен появиться после $x[(?<=\$x\[) . Если шаблон должен быть сопоставлен, то XYZ затем за XYZ $X должен существовать.

  • .* сопоставлять все после последнего совпадающего шаблона

  • LookAhead(?=\])LookAhead все до ]

Поскольку PHP интерполирует переменные (переменные начинаются со знаков доллара) внутри строк с двойными preg_match_all это предотвращает размещение регулярного выражения preg_match_all в одной кавычной строке. Хотя «$» все еще сохраняется в регулярном выражении, поскольку он является символом привязки регулярного выражения.

В этом случае /x\[(.*?)\]/ также работает, но я думаю, что чем точнее вы можете быть лучше.

 $text = ' $temp=Array(true); if($x[211] != 15) $temp[] = 211; if($x[224] != 1) $temp[] = 211; if(sizeof($temp)>1) { $temp[0]=false; } return $temp; '; preg_match_all('/\$x\[(.*?)\]/', $text, $matches); print_r($matches[1]); 

Вывод:

 Array ( [0] => 211 [1] => 224 )