Mehrere Übereinstimmungen innerhalb einer regulären Gruppe?

Ich muss alle 'Tags' (z. B.% thisIsATag%) abgleichen, die in XML-Attributen vorkommen. (Hinweis: Es wird garantiert, dass ich gültiges XML erhalte, sodass keine vollständige DOM-Überquerung erforderlich ist.) Mein Regex funktioniert, außer wenn es gibtzwei Tags in einem einzelnen Attribut, nur das letzte wird zurückgegeben.

Mit anderen Worten, dieser reguläre Ausdruck sollte tag1, tag2, ..., tag6 finden. Es werden jedoch Tag2 und Tag5 ausgelassen.

Hier ist ein lustiges kleines Testgeschirr für Sie (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);
?>

Vielen Dank! :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage