Múltiplas correspondências dentro de um grupo de expressão regular?

Preciso corresponder a todas as 'tags' (por exemplo,% thisIsATag%) que ocorrem nos atributos XML. (Nota: Estou garantido para receber XML válido, por isso não há necessidade de usar passagem completa de DOM). Meu regex está funcionando, exceto quando existemdois tags em um único atributo, apenas o último é retornado.

Em outras palavras, esse regex deve encontrar tag1, tag2, ..., tag6. No entanto, omite tag2 e tag5.

Aqui está um pequeno equipamento de teste para você (PHP):

<?php

$xml = <<<XML
<data>
 <slideshow width="625" height="250">

  <screen delay="%tag1%">
   <text x="30%" y="50%" animatefromx="800">
    <line fontsize="32" fontstyle="bold" text="Screen One!%tag2% %tag3%"/>
   </text>
  </screen>

  <screen delay='%tag4%'>
   <text x="30%" y="50%" animatefromx="800">
    <line fontsize='32' fontstyle='bold' text='Screen 2!%tag5%%tag6%'/>
   </text>
  </screen>

  <screen>
   <text x="30%" y="50%" animatefromx="800">
    <line fontsize="32" fontstyle="bold"  text="Screen Tres!"/>
   </text>
  </screen>

  <screen>
   <text x="30%" y="50%" animatefromx="800">
    <line fontsize="32" fontstyle="bold"  text="Screen FOURRRR!"/>
   </text>
  </screen>

 </slideshow>
</data>
XML;

$matches = null;
preg_match_all('#<[^>]+("([^%>"]*%([^%>"]+)%[^%>"]*)+"|\'([^%>\']*%([^%>\']+)%[^%>\']*)+\')[^>]*>#i', $xml, $matches);

print_r($matches);
?>

Obrigado! :)

questionAnswers(3)

yourAnswerToTheQuestion