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
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zarzucę jak ja to widzę algorytmem (IMG:style_emoticons/default/smile.gif)
1. Wykonaj w pętli:
a) znajdź w stringu pozycję </a>
(IMG:style_emoticons/default/cool.gif) dodaj do znalezionej pozycji długość </a>
c) wykonaj tyle razy ile masz w limicie linków.
2. Używając wyrażeń regularnych w pozostałej reszcie usuń znaczniki A wraz z atrybutami, zostawiając treść.

Ale można prościej (IMG:style_emoticons/default/smile.gif)
1. Podziel string na tablicę używając jako delimitera </a> i dając jej maksymalnie LIMIT+1 elementów
2. Jeśli wynikowa tablica ma mniej niż LIMIT+1 elementów zostaw w spokoju.
3. Z ostatniego elementu tablicy usuń wszystkie A z atrybutami, pozostawiając jednak treść pomiędzy tagami A
4. Scal tablicę używając do łączenia </a>

Drugi choć wydaje się dłuższy powinien być szybszy i prostszy w implementacji (IMG:style_emoticons/default/smile.gif)
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: 16.06.2026 - 11:18