Non sono sicurissimo di aver capito esattamente cosa ti serve, ma a proposito di regex ricorsive, dai un'occhiata a questo codice e dimmi se fa al caso tuo:
Codice PHP:$str = "[wf_com:(wf_repeat_string:[wf_com:(wf_repeat_string:[wf_com:(wf_repeat_string:PROVA ,3)],4)],5)]";
while (preg_match("/\\[wf_com:\\(wf_repeat_string:(\\w+\\s?|(?R)),(\\d+)\\)\\]/", $str, $matches)) {
print_r($matches);
$str = $matches[1];
}

Rispondi quotando