Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wyrażenia regularne] Wyciąganie linku z tekstu (problem z przecinkiem)
Forum PHP.pl > Forum > PHP
Krowa
Witam,

Mam problem z zamianą tekstu w postaci "cośtam cośtam www.adresik.com/super,212, cośtam cośtam" na hyperlink (<a>)
Kod
$txt=preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "$1<a href=\"http://$2\">$2</a>", $txt);


Wyrzuci niepoprawnego linka
Kod
<a href="http://www.adresik.com/super,212,">http://www.adresik.com/super,212,</a>


Wiecie jak zrobić wyrażenie regularne?
Darti
a jak ma wygladac poprawny link z tego przykladu ?
Krowa
Oczekiwany efekt preg_replace [chodzi o to, żeby nie brać ostatniego przecinka do linka (jeśli występuje)]:
Kod
<a href="http://www.adresik.com/super,212">http://www.adresik.com/super,212</a>,


Wymyśliłem coś takiego
Kod
$text = preg_replace("#(^|\s)(www\.\S+)(,?)#i","HREF=$2",$text);

Ale nie działa tak jak powinno (np. przy linkach nie zawierających przecinka)

Udało się winksmiley.jpg

Kod
$text='Cośtam www.xxx.com/display,99, www.yyy.com.pl/display,99, cośtam www.eeeee.pl cośtam';

$text = preg_replace("#(^|\s)(www\.\S+)(,)#i","$1<a href='http://$2'>$2</a>$3",$text);


Wynik:
Kod
Cośtam <a href='http://www.xxx.com/display,99'>www.xxx.com/display,99</a>, <a href='http://www.yyy.com.pl/display,99'>www.yyy.com.pl/display,99</a>, cośtam www.eeeee.pl cośtam


Czy da się w tym preg'u dodać funkcjonalność zamiany trzeciego linku z $text (www.eeeee.pl) do postaci <a href=...>?
johnson
Da się:

  1. <?php
  2. $text='Cośtam www.xxx.com/display,99, www.yyy.com.pl/display,99, cośtam www.eeeee.pl cośtam';
  3. $text = preg_replace("#(^|s)(www.S+)(,)?#i","$1<a href='http://$2'>$2</a>$3",$text);
  4. echo $text;
  5. ?>
Krowa
Da się, pytanie tylko jak to zrobić? :] Czy muszę użyć kilku funkcji preg_replace żeby osiągnąć pożądany efekt?

Kod
$text='Cośtam www.xxx.com/display,99, www.yyy.com.pl/display,99, cośtam www.eeeee.pl cośtam';
$text=preg_replace("#(^|\s)(www\.\S+)(,)?#i","$1<a href='http://$2'>$2</a>$3",$text);


Wynik nie jest taki jaki ma być:
Kod
1Co�tam <a href='http://www.xxx.com/display,99,'>www.xxx.com/display,99,</a> <a href='http://www.yyy.com.pl/display,99,'>www.yyy.com.pl/display,99,</a> co�tam <a href='http://www.eeeee.pl'>www.eeeee.pl</a> co�tam
johnson
Oczywiście, przepraszam, mój błąd. Myślę, że teraz będzie ok:

  1. <?php
  2. $text='Costam www.xxx.com/display,99, www.yyy.com.pl/display,99, costam www.eeeee.pl costam';
  3. $text = preg_replace("#(^|s)(www.S+[^, ])#i","$1<a href='http://$2'>$2</a>$3",$text);
  4. echo $text;
  5. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.