Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja preg_replace niczego nie zamienia w ciągu znaków.
jack1142
post 8.03.2015, 19:22:42
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.03.2015

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował jack1142 8.03.2015, 19:23:04
Go to the top of the page
+Quote Post
kreatiff
post 8.03.2015, 19:54:43
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


  1. preg_replace('#(<img.*?src="(.*?)".*?/>)#', '<a href="$2">$1</a>', $html);
Go to the top of the page
+Quote Post
jack1142
post 8.03.2015, 20:14:44
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 8.03.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
kreatiff
post 9.03.2015, 00:05:48
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


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=".
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:38