Se ho capito quello che ti serve e' il negative lookahead: cerca qualunque cosa purche' non sia (gruppoB).

codice:
<?php
$phrase = "(gruppoA)testo (gruppo lala(gruppoB)altro testo(gruppoA)trallalalalala(gruppoB)";

preg_match_all("#\(gruppoA\)(?!\(gruppoB\))(.*?)\(gruppoB\)#", $phrase, $match);

print_r($match);
?>
Puo' andare?