Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne [link=www... => [link=http://w
Forum PHP.pl > Forum > PHP
rmn
Nie moge rozwiązać następującego problemu. Chce, żeby wszystkie ciagi znaków w postaci [link=jakis_adres] byly przerabiane na [link=http://jakis_adres] jesli 'jakis_adres' nie zawiera w sobie ciagu :// ?

Pomocy!
rmn
chyba za pomocą tej funkcji nie da sie tego zrobić?
strife
Witam,

Jestem słaby w wyrażeniach regularnych, aby coś wymyślić muszę posiedzieć bardzo długo, sklepałem coś takiego na szybko, mam nadzieję że pomorze Ci to w pewien sposób.

  1. <?php
  2.  
  3.   $string = '[link=Przyklad]';
  4.   
  5.   $replace = preg_replace('#([.*?=)([wW]+)(])#is', '1http://23', $string);
  6.   
  7.   echo $replace;
  8.  
  9. ?>

Powinno działać.

Pozdrawiam!
rmn
Dzięki za pomoc!

Problem w tym, że chodzi o to abym po wpisaniu:
[link=przyklad] dostawał [link=http://przyklad]
ale jesli user wpisze sam protokoł np. [link=ftp://przyklad] to parser ma to juz zostawic w spokoju.
tts
a moze taki szkic rozwiazania:

  1. <?php
  2.  
  3. $ciag = '[link=przyklad]';
  4. if( !eregi(&#092;"[link=http://+$\",$ciag) && !eregi(\"[link=ftp://+$\",$ciag) )
  5.    $ciag = str_replace(&#092;"[link=\",\"[link=http://\",$ciag);
  6.  
  7. ?>

mozesz w miejsce brzydkiego !eregi(.... i wymieniania protokolow zastosowac jakies rozgalezienie w wyrazeniach regularnych.

a swoja droga to dlaczego userowi nie wywalic komunikatu bledu zamiast zamieniac bo skad wiadomo czy chodzilo o http czy ftp?
bendi
  1. <? preg_replace( '%[link=(http://|ftp://)?(.*?)]%ie', '\"[link=\".(strlen(\"$1\")?\"$1\":\"http://\").\"$2\".\"]\"', $sString ); ?>
rmn
smile.gif


Nie możemy sie zrozumieć. Chodzi mi tylko o to aby zmienić te linki, ktore nie mają okreslonego protokłu. Pozostałe mają zostać nie zmienione. (opcja z wyliczaniem protokołów, ktore moga się pojawić mi nie odpowiada, bo jest mnóstwo niestandardowych 'protokołów' np. gg:// ed2:// itd itp

Więc potrzebuje wyrażenia, ktore dopsuje się do [link=www.onet.pl] ale nie dopasuje sie do [link=http://www.onet.pl] czy jakiegokolwiek z :// w parametrze. Niby proste a nie moge sobie poradzic.

Cytat
a swoja droga to dlaczego userowi nie wywalic komunikatu bledu zamiast zamieniac bo skad wiadomo czy chodzilo o http czy ftp?


Bo zwykły user zazwyczaj sam nie wie:)

Ok:) mam, może kiedyś się przyda albo znajdziecie błąd;)

  1. <?php
  2. preg_replace('#[link=(w+)([^:][^/][^/][w.]+)]#', '[link=http://$1$2]', $text);
  3. ?>
bendi
No teraz juz jest git biggrin.gif
  1. <?php
  2. echo preg_replace( '%[link=([a-z]+://)?(.*?)]%ie', '\"[link=\".(strlen(\"$1\")?\"$1\":\"http://\").\"$2]\"', $sString );
  3.  
  4. ?>
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.