Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z preg_replace
Forum PHP.pl > Forum > Przedszkole
marcinek37
Mam kod:
  1. <?
  2. $links = '
  3. <a href="link" class="prev">PREV</a>
  4. <a href="link">2</a>
  5. <a href="link">3</a>
  6. <a href="link" class="next">NEXT</a>
  7. ';
  8.  
  9. $links = preg_replace('#<a href="(.*?)"(.*?)>(.*?)</a>#si', '<li><a href="\\1"\\2>\\3</a></li>', $links);
  10. $links = preg_replace('#<li><a href="(.*?)" class="next">NEXT</a></li>#si', '<li class="next"><a href="\\1">NEXT</a></li>', $links);
  11.  
  12. echo $links;
  13. ?>


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]
jaslanin
  1. <?
  2. $links = '
  3. <a href="link" class="prev">PREV</a>
  4. <a href="link">2</a>
  5. <a href="link">3</a>
  6. <a href="link" class="next">NEXT</a>
  7. ';
  8.  
  9. $links = preg_replace('#<a href="(.*?)"(.*?)>(.*?)</a>#si', '<li><a href="\\1"\\2>\\3</a></li>', $links);
  10. $links = preg_replace('#<li><a href="([^"\']*?)" class="next">NEXT</a></li>#si', '<li class="next"><a href="\\1">NEXT</a></li>', $links);
  11.  
  12. echo $links;



Niemniej jednak takimi rzeczami lepiej zajmować się poprzez jakieś narzędzia do operowania na DOM np. http://simplehtmldom.sourceforge.net/ a nie męczyć się z regexp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.