ďťż

Wyrażenia regularne

       

Podstrony


telcocafe

Sprawa wygląda następująco:
mam tablicę wyrazów do zamiany na linki przykładowo:
http://www.wp.pl www.wp.pl wp.pl
są to różne kombinacje tego samego adresu [tu przedstawiono to w kolosalnym uproszczeniu nie można np. http:// umieścić bezpośrednio w wyrażeniu ponieważ nie wszystkie takie kombinacje są porządane... mniejsza o to...]
zamiana powinna wyglądać w ten sposób
tekst [url="http://www.wp.pl"]http://www.wp.pl[/url] zamiana na: tekst <a href="http://www.wp.pl?blabla bla" title="wp.pl">wp.pl</a>
adres do którego ma prowadzić odnośnik, a także wartość title jest z góry zdefiniowana, problemem jest to, że wyrażenie jest o tyle zachłanne, że próbując zamienić kolejny element tablicy "włazi" do znacznika <a> i w środku znajduje title="wp.pl" więc to wp.pl zamienia znów w cały link... i robi się link, w linku, a także zamienia tekst zawarty między > a < czyli wp.pl, które widoczne jest jako tekst odnośnika... proste ograniczenia typu wyliczenie znaków które nie moga być przed i po odpada [^"'>] bo niekiedy tekst jest np. pogrubiony...
Użytkownik metaxy edytował ten post 04 październik 2007, 12:37


function make_clickable($str) { $str = preg_replace( array( '#([\s>]|^)([\w]+?://[\w\#$%& ~/.\-;:=,?@\[\]+]*)#is', '#([\s>]|^)((www|ftp)\.[\w\#$%&~/ .\-;:=,?@\[\]+]*)#is', '#([\s>]|^)([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), array( '$1<a href="$2" rel="nofollow">$2</a>', '$1<a href="http://$2" rel="nofollow">$2</a>', '$1<a href="mailto:$2@$3" rel="nofollow">$2@$3</a>'),$str); $str = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $str); $str = trim($str); return $str; }

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.