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! :)