Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] wyrazenia regularne
tantaos
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.11.2007

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


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
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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

Ten post edytował nevt 16.12.2007, 14:48:37


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
tantaos
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 25.11.2007

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


heh na to bym nie wpadl, dzieki
Go to the top of the page
+Quote Post
ayeo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


  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


--------------------
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 Aktualny czas: 20.08.2025 - 08:43