- preg_replace_callback: documentation ( source)
- preg_replace: documentation ( source)
<?php
$html = '<ul class="foo">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<ul class="foo">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>';
$newHtml = preg_replace_callback("/(?<=<ul\sclass=\"foo\">).*?(?=<\/ul>)/s", function($ma){
return preg_replace("/(?<=<li>)(.*)(?=<\/li>)/", '<svg class="icon"><use xlink:href="#foo"></use></svg>$1', $ma[0]);
}, $html);
echo $newHtml;