
------解决思路----------------------
<?php
$str = "[size=18px]123[size=16px]456[/size]789[/size]";
preg_match_all('#\[size=[^\[\]]+\](?:[^\[\]]+
------解决思路----------------------
((?R)))*\[/size\]#', $str, $matchs);
print_r($matchs);
------解决思路----------------------
别小看我这么写,答案正是你想要的$str = "123[size=16px]456789[/size]";
$pattern = '/\[size=18px\]123(.*?)789\[\/size\]/';
preg_match_all($pattern, $str, $arr);
print_r($arr);