Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenie regularne do zamiany słów na linki. Niezła łamigłówka
czjakub
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 21.10.2008

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


Witam.
Mam takie zadanko: muszę zamienić pewne słowa kluczowe na linki. Np. słowo "test" na <a href="www.wp.pl">test</a>. Niby proste, ale musze unikać sytuacji, w której mogła by nastąpić zmiana słowa protest na pro<a href="www.wp.pl">test</a> lub <a href="www.test.pl">Jakiś tekst</a> na <a href="www.<a href="www.wp.pl">test</a>.pl>Jakiś tekst</a> itd itp. Muszę rozwiązać to wyrażeniem regularnym. Powinno ono "wyciągać" wszystkie słowa kluczowe (w naszym wypadku) test ale tylko wtedy jeśli nie znajdują się między znacznikami <a></a> i w znaczniku <img>, oraz słowo kluczowe nie występowało w większym słowie czyli test w protest. Trochę to zakręcone może, ale siędzę nad tym już ładnych parę godzin. Przypominam: w grę wchodzi tylko regex żadne wyrzucanie linków w których występują słow kluczowe do tablicy ani inne takie smile.gif Za wszelką pomoć będę bardzo wdzięczny smile.gif.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




a nie wystarczy $x=str_replace(' test ','<a href=test>a</a>',$x); ?
Sprawdza tylko samotne test bo na początku i końcu jest spacja smile.gif
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





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

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


a co jeśli to słowo jest na początku akapitu, na końcu zdania (czyli jest kropka itd...) ;p

zdefinij jeszcze w wyrażeniach regularnych czego nie powinno byc na poczatku i na końcu (jakich znaków)

taki mały przykąłdzik z neta i spróbuj bo moze ci się to w przyszłości przydać - jak sobie nie poradzisz to później pomogę i napisze gotową:
Cytat
Znak '^' wpisany na pierwszym miejscu wewnątrz nawiasów kwadratowych oznacza negację całego zakresu, np.:
"^k.*[^w]a$" - reguły tego wyrażenia mogą spełniać słowa kora, koala, kura ale pewne niecenzuralne słowo ich nie spełnia :-))))
"[^0-9]*" - tutaj regułą jest by nie pojawiła się żadna cyfra


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
czjakub
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 21.10.2008

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


Heh. Ten fragment, który zacytowałeś czytałem wiele razy smile.gif . Nic z tego ;-). Napisałem sobie regułkę, która wyczytuje wszystko z tagów <a></a> i <img /> i z tego co pomiędzy nimi i chciałem to jakoś zanegować i potem z reszty obszaru wybrać słowa test (oczywiście te samotne, które nie są częścią innych wyrazów :-) ) ale nie mam pojecia jak to zanegować. Nie wiem też czy już za bardzo nie zacząłem kombinować i iść w złą stronę z tym wyrażeniem :-). Oto wyrażenie do wyciąganie tego co jest w tagach i muszę to zanegować ale nie mam jak:-/: <a\b[^>]*>(.*?)<\/a>|<img\b[^>]*>(.*?) Odnośnie zdefiniowania czego nie powinno być na końcu i na początku- może być wszystko. Jedynym ograniczeniem jest to żeby nie wyciągać wyrazu i go nie zamieniać jeśli jest w tagach bo rozjedzie się cały html. Jeśli jest to wyraz samotny można go zamienić. Z góry dzięki za pomoc.

Pozdrawiam.

Ten post edytował czjakub 22.10.2008, 07:54:28
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 - 13:20