Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyrazenia regularne
Forum PHP.pl > Forum > PHP
tantaos
chcem napisać wyrażenie regularne, ktore bedzie znajdować wszystkie zdjęcia, które nie są linkami czyli wymyslilem, ze na koncu zdjecia nie może znajdować się znak "</a>", dodatkowo pomiedzy zdjeciem a znakiem "</a>" moze znajdowac sie tekst(wiadomo ze w tym tekscie nie moze byc znaku "<a ... >".

czyli wyrazenie powino zadzialac na takim tekscie:
tekst..tekst..<img ....>..test....text..
i na takim:
..text..<img ....><br >....tekxt..

nie powinno dzialac na takim:

..text..<img ...></a>..text...

i na takim:
<img ..>....text....</a>


Wyrazenie probowalem napisac w taki sposob:
  1. <?php
  2. <img src="([^"]*)" alt="[^"]*" width="([^"]*)" height="([^"]*)"[^>]+>.{2}[^a]{1}/
  3. ?>


Dziala, ale ma kilka wad popierwsze nie zadziala w momencie kiedy pomiedzy znacznikiem <img> a </a> bedzie znajdowac sie jakis tekst, po drugie nie zadziala kiedy po znaczniku <img> zdazy sie tak ze 3 litara bedzie litera "a".
Prosze o pomoc aby w tym wyrazeniu.

Dodatkowo moze ktos mi wytlumaczyc jak zapisać aby nie wystepowal jakis ciąg znaków pisząc [^</a>] znaczy to - nie moze wystepowac znak <, /, a, >. A jak zapisać - ma nie wystepowac ciag znakow </a> ?

Mam nadzieje ze ktos mi z tym pomoze
nevt
najprościej to zrobić w 2 krokach, w pierwszym usuwasz z przeszukiwanego tekstu wszystkie znaczniki <a> razem z zawartością, np:
  1. <?php
  2. $text = preg_replace('/<a(.*)?/a>/', '', $text);
  3. ?>

a w drugim kroku wyszukaj znaczniki <img> które pozostały po pierwszym kroku - to już jest proste...
powodzenia
tantaos
heh na to bym nie wpadl, dzieki
ayeo
  1. <?php
  2. $text = "Jakiś tekst<a href=''><img src='dsfdssdf.jpf'></a>dalsza część tekstu<img src='test.jpg'>";
  3.  
  4.  
  5. $img_pattern = "#<img src='(.+?)'.*?>#";
  6. $a_pattern  = "#<a.*?>(<img src='(.+?)'.*?>).*?</a>#";
  7.  
  8. preg_match_all($img_pattern, $text, $img);
  9. $img = $img[1];
  10. foreach($img as $image) 
  11. {
  12. $images[] = $image;
  13. }
  14.  
  15.  
  16.  
  17. preg_match_all($a_pattern, $text, $a);
  18. $a = $a[2];
  19. foreach($a as $aline)
  20. {
  21. $images_from_link[] = $aline;
  22. }
  23.  
  24. print_r($images);
  25. print_r($images_from_link);


tablica $images zawiera nazwy wszystkich plików (obrazków) ze znacznikow <img>
tablica $images_from_link zawiera nazwy obrazków ze znaczników <a>

Wystarczy, że sprawdzisz czy jakaś nazwa z jednej tablicy powtarza się w drugiej winksmiley.jpg

W sumie można napisać jedno wyrażenie regularne.... ale to dopiero teraz na to wpadłem winksmiley.jpg
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.