<? $links = ' <a href="link" class="prev">PREV</a> <a href="link">2</a> <a href="link">3</a> <a href="link" class="next">NEXT</a> '; $links = preg_replace('#<a href="(.*?)"(.*?)>(.*?)</a>#si', '<li><a href="\\1"\\2>\\3</a></li>', $links); $links = preg_replace('#<li><a href="(.*?)" class="next">NEXT</a></li>#si', '<li class="next"><a href="\\1">NEXT</a></li>', $links); ?>
Wynik jest taki:
<li class="next"><a href="link" class="prev">PREV</a></li>
<li><a href="link">2</a></li>
<li><a href="link">3</a></li>
<li><a href="link">NEXT</a></li>
A powinien być taki:
<li><a href="link" class="prev">PREV</a></li>
<li><a href="link">2</a></li>
<li><a href="link">3</a></li>
<li class="next"><a href="link">NEXT</a></li>
Z uwagi na złożoność tego, co chcę osiągnąć dodam tylko, że koniecznie najpierw każdy link musi być otoczony <li>, a dopiero potem ten konkretny link ma mieć usuniętą klasę na rzecz <li>.
Nie mogę też zastąpić (.*?) ciągiem typu [0-9a-z]