Вы написали \d
, когда должно быть \d+
:
$reg = "/(\[{(false|true)};{.+};{\d+}\])+/";
preg_match_all($reg,"[{false};{abcde};{10}][{true};{fghij};{10}]",$matches);
print_r($matches);
Хотя в вашем случае это не имеет значения, я бы также избежал скобок, поскольку они являются специальными символами.
$reg = "/(\[\{(false|true)\};\{.+\};\{\d+\}\])+/";