Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyrażenia regularne, Przedewszystkim funkcja 'ergi_replace'... :)
slightyboy
post 12.07.2007, 09:24:28
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 12
Dołączył: 12.07.2007

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


Dużo czytałem o wyrażeniach regularnych, ale jakoś nadal nie mogę się z nimi uporać... Może ktoś pomóc? Na dobrą sprawę nie mam pojęcia co robię źle. Może poprostu źle rozumiem używane przeze mnie funkcje. Problem jest taki:

Konstruuje skrypt, który modyfikuje na własne potrzeby dodawane do bazy linki. Jeśli chodzi o instrukcje warunkowe to działają one jak należy. Problem tkwi w podmianie w funkcji ergi_replace. Gdy definicja target znajduje się na końcu skrypt podmienia dobrze, gdy owa definicja znajduje się gdzieś po środku, czy na początku (gdy nie kończy stringa) wszystko się sypie. Sypie znaczy się, że skrypt kasuje wszystko co znajduje się po podmienionym fragmencie:

  1. <?php
  2. // Link w takiej formie modifikuje się dobrze
  3. $link = "<a href="odno&#347;nik" title="tytuł" target="frame">";
  4. // Link w takiej formie NIE MODYFIKUJE się dobrze
  5. $link = "<a href="odno&#347;nik" target="frame" title="tytuł">";
  6.  
  7. // Funkcja modyfikujący linki
  8. if (ereg(".+target=".+".+", $link)) { // gdy link zawiera już definicję 'targetu'
  9. $link = eregi_replace("target=".+"", "target="_blank"", $link);}
  10. else{ // gdy link nie zawiera definicji 'targetu'
  11. $link = str_replace(">", " target="_blank">", $link);}
  12. ?>


PS. Jeśli chodzi o składnię i cały wklejony przeze mnie kod to jest on w 100% dobry, brak literówek, czy jakichkolwiek innych braków (choćby znaków), jedyny jego mankament to najprawdopodobniej zła kombinacja wyrażenia regularnego. Niestety nie umiem się uporać z tym sam. biggrin.gif

Ten post edytował slightyboy 12.07.2007, 19:19:02
Go to the top of the page
+Quote Post
yaotzin
post 12.07.2007, 09:33:48
Post #2





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


Nie mam jak tego sprawdzić, ale nie wiem czy ten + nie powinien stąd zniknąć...


  1. <?php
  2. eregi_replace("target=".+"", "target="_blank"", $link);
  3. ?>


--------------------
------
Per Aspera Ad Astra
Go to the top of the page
+Quote Post
slightyboy
post 12.07.2007, 19:18:03
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 12
Dołączył: 12.07.2007

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


Niestety nie działa... Nie wiem już sam co robić. Wydaje mi się, że jest ok, a tu jednak ucina zaraz po tym znaczniku 'target'. :/

Próbowałem także inaczej z zastowosowaniem tablic. Sposób ten również nie działa, niewiedzieć czemu zupełnie (exclamation.gif!). Coś się uwzięło na mnie...

  1. <?php
  2. $string = "<a title="asd" name="asd" target="bla bla" href="erwer">";
  3. $string = str_replace("=", "", $string);
  4.  
  5. $tab = explode(""", $string);
  6.  
  7. /*
  8. Tablica powstająca w wyniku explode:
  9.  
  10. $tab[0] => '<a title'
  11. $tab[1] => 'asd'
  12. $tab[2] => 'name'
  13. $tab[3] => 'asd'
  14. $tab[4] => 'target'
  15. $tab[5] => 'bla bla'
  16. $tab[6] => 'href'
  17. $tab[7] => 'erwer'
  18. $tab[8] => '>'
  19.  
  20. */
  21.  
  22. // przeszukiwanie tablicy w celu znalezienia 'target' (NIE ZWRACA ŻADNEJ LICZBY, choć powinna (!!!))
  23. $id = (array_search("target", $tab)); 
  24. // dodawanie 1 by odnaleźć wartość znacznika 'target'
  25. $rid - $id + 1; 
  26. // zastąpienie wartość 'target' własną wartością
  27. $string = str_replace($tab[$rid], "mojeee", $string);
  28. ?>
Wiem, że brak tu funkcji 'sklejającej' link, ale to kwestia dosłownie paru minut. Nie wiem już sam co zrobić, bo i tamten sposób nie działa i ten też nie (choć oba powinny działa [nie jestem pewien co do wyrażeń regularnych, ale co do tego sposobu tak!])... Ma ktoś jakąś propozycję... Ja już się chyba poddaje innego sposobu nie znam (oprócz ręcznej zamiany)... sadsmiley02.gif

PS. Funkcja array_search() tak jakby wybierała sobie co chce znaleźć a co nie... Np. frazy 'asd', 'erwer', '<a title' znajduje... Nie wiem w czym robię błąd, bo ja go szczerze nie widzę...
Go to the top of the page
+Quote Post
Kicok
post 13.07.2007, 11:07:36
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Co do array_search to pod $tab[4] nie masz 'target', tylko ' target' (zwróć uwagę na spację)


A co do wyrażeń regularnych, to .+ dopasuje ci tak dużo znaków jak to tylko możliwe, ale żeby wyrażenie nadal pasowało, czyli target=".+" dopasuje ci:
Cytat
<a href="abc.html" target="_self" class="link">abc</a>


Możesz zamienić to na .+? (które dopasuje ci jak najmniej znaków, ale żeby wyrażenie nadal pasowało), lub [^"]+ (które nie dopasuje żadnego cudzysłowu).
target=".+?":
Cytat
<a href="abc.html" target="_self" class="link">abc</a>


--------------------
"Sumienie mam czyste, bo nieużywane."
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: 15.06.2025 - 14:12