Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja preg_replace niczego nie zamienia w ciągu znaków.
Forum PHP.pl > Forum > PHP
jack1142
Witam,
jako iż mam zamiar korzystać z lightbox'a to stworzyłem wyrażenie, które znajduje obrazek w kodzie i dodaje do kodu element a z linkiem do obrazka.
Kod wygląda następująco:
  1. <?php
  2. $html = preg_replace( '/(<img )([^]*)(?!src=")*(src=")([^"]*)([^\/>]*)(\/>)/', "<a href='$4' data-lightbox='pageimg'>$1$2$3$4$5$6</a>", $html);
  3. ?>

Zmienna $html:
  1. <p><strong>Przykładowy pogrubiony tekst.</strong></p>
  2.  
  3. <p>Przykładowy tekst.</p>
  4.  
  5. <p><img alt="coś" class="test1" dir="ltr" id="test" lang="pl" src="/templates/default/assets/logoarka.png" style="border-style:solid; border-width:1px; float:left; height:107px; margin:3px 2px; width:108px" title="test32" /></p>

Problem w tym, że z jakiegoś powodu ten kod nie działa. Wyrażenie regularne jest poprawne, gdyż sprawdzałem je na stronie RegExr(sprawdzającej poprawność wyrażenia).
Nie wiem, gdzie w kodzie popełniłem błąd. Wydaje mi się on poprawny, jednak rzadko korzystam z wyrażeń regularnych, więc mogłem czegoś nie zauważyć.
kreatiff
  1. preg_replace('#(<img.*?src="(.*?)".*?/>)#', '<a href="$2">$1</a>', $html);
jack1142
Dzięki, teraz działa tak, jak należy. Co jednak zrobiłem źle w samym wyrażeniu regularnym? Oczywiście twoje jest lepsze, bo krótsze, ale dlaczego moje nie działało?
kreatiff
Nie wiem o co chodzi w tym elemencie: ([^]*), jakby czegoś zabrakło, a to już on powoduje brak dopasowania. Nie rozumiem też zastosowania negative lookahead w tym wypadku. To ma za zadanie złapania czegoś nie poprzedzonego src=", a po otwarciu img właśnie interesują nas wszystkie znaki tym poprzedzone, by wyłapać to co znajduje się pomiędzy img a src=".
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.