Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][Regexp] Zostaw tylko (X) linków w tekscie
barat
post
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


Witam. Mam pewną zagwostkę. Powiedzmy, że mam taki tekst:

  1. Lorem ipsum dolor sit <a href="#">amet</a>, consectetur adipiscing elit. Proin <a href="#">amet</a> elementum odio eget mauris ultricies vulputate. Suspendisse scelerisque vulputate risus ac lobortis. <a href="#">Aenean</a> euismod urna at libero vehicula non sollicitudin elit luctus. Aliquam ultricies nisi ac sapien tempus imperdiet sit amet ut nulla. Proin aliquam blandit libero eu ornare. Suspendisse a erat ligula. Phasellus ultricies odio nec metus dictum eget luctus augue interdum. Morbi at turpis libero, imperdiet iaculis sapien. In sed sapien eget turpis semper imperdiet. <a href="#">Nulla</a> iaculis blandit lorem, eget laoreet mauris euismod sed. Vivamus hendrerit euismod tellus, in adipiscing lectus eleifend in. <a href="#">Aliquam</a> imperdiet placerat orci ac ultrices. Curabitur eu sem tortor, at dapibus dolor.


Jakie wyrażenie zastosować, by zostawić tylko 1/2/3/4/X linki w tym tekście, a pozostałe zlikwidować i zostawić tylko tekst pomiędzy <a></a> ?
Oczywiście przyjmując, że:
  • Zostawiamy linki "od lewej" czyli 1/2/3/4/X pierwszych
  • Nigdy nie wiem ile linków zostało wpisanych
  • Linki nie koniecznie muszą być różne (np. 2 wystąpienia <a href="#">amet</a> + kilka innych linków. Mogą być także obok siebie)
  • Linki mogą mieć dodatkowe atrybuty np: <a href="#" target="_blank" title="title" onclick="" class="" id="">aaa</a>


Czyli np dla "pseudofunkcji" zostaw_linki(2) efekt (dla tekstu powyżej) byłby:

  1. Lorem ipsum dolor sit <a href="#">amet</a>, consectetur adipiscing elit. Proin <a href="#">amet</a> elementum odio eget mauris ultricies vulputate. Suspendisse scelerisque vulputate risus ac lobortis. Aenean euismod urna at libero vehicula non sollicitudin elit luctus. Aliquam ultricies nisi ac sapien tempus imperdiet sit amet ut nulla. Proin aliquam blandit libero eu ornare. Suspendisse a erat ligula. Phasellus ultricies odio nec metus dictum eget luctus augue interdum. Morbi at turpis libero, imperdiet iaculis sapien. In sed sapien eget turpis semper imperdiet. Nulla iaculis blandit lorem, eget laoreet mauris euismod sed. Vivamus hendrerit euismod tellus, in adipiscing lectus eleifend in. Aliquam imperdiet placerat orci ac ultrices. Curabitur eu sem tortor, at dapibus dolor.


Ten post edytował barat 8.12.2009, 10:11:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


podałem przykąłd jak użyć callback do obiektów bez zmiennych statycznych/globalnych ;p - obiektowo najłatwiej napisać sterownik (gdzie to tylko zestaw funkcji z if else...), używając funkcji preg_replace_callback text przeszuka tylko raz...

co prawda nie z linkami ale pisałem coś bardziej złożonego raz i jest to świetna sprawa - preg_replace_callback wypada też deczko szybciej niż sam preg_replace jeśli nic się nie robi - pisze o tym w manualu (choć dawno to czytałem i nie pamiętam gdzie - podejrzewam, że na stronie funkcji (IMG:style_emoticons/default/winksmiley.jpg) )

ps.

preg_replace_callback przekazuje do funkcji callback bodajże tylko jeden parametr - znalazłem jeden swój skrypcik... co ważniejsze ten parametr jest tablicą - tak więc pisząc funkcję callback niech wewnątrz niej zrobi print_r($wejsciowa_zmienna); by zobaczyć gdzie co siedzi - zależy to od skonstruowanego wyrażenia regularnego (czyli w zasadzie tak jak w preg_match)

poza tym inne dosyć fajne rozwiązanie ale na starcie jeśli nigdy tym się nie "bawił" jest przeszukanie tego tekstu przez DOM - ale na razie to rozwiązanie odradzam jeśli nigdy się nim nie bawił gdyż zrozumieć Mu go będzie ciężej (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował zegarek84 8.12.2009, 12:25:10
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 25.09.2025 - 20:53