Bibehold linieskift ifm. preg_replace i PHP
Jeg har følgende kode, der skal danne a-links ud fra et givent stykke tekst, der oftest er på flere linier.$str = preg_replace("/(\s)+((ht|f)tp:\/\/[^\s]+)(\s|$)+/i", "\\1<a href=\"\\2\" target=\"_top\">\\2</a>\\4", $str);
$str = preg_replace("/(\s)+(www\.[^\s]+)(\s|$)+/i", "\\1<a href=\"http://\\2\" target=\"_top\">\\2</a>\\3", $str);
$str = preg_replace("/(\s)+([a-z0-9_.-]+@[a-z0-9.-]+)(\s|$)+/i", "\\1<a href=\"mailto:\\2\">\\2</a>\\3", $str);
Den skal så fx lave følgende tekststykke om:
------------------------
"Hej,
Dette er en test af, hvorvidt makeClickable($str) fucker denne teksts linieskift op. Herefter er dobbelt newline-linieskift
www.eksperten.dk
www.sharksforum.com
(der er enkelt linieskift FØR og EFTER denne linie)
Held og lykke med fejlsøgningen"
------------------------
Men når jeg parser den igennem ovenstående kode, så sætter den et ekstra linieskift ind efter www.eksperten.dk, som den godt nok laver om til et link, men så er der jo en blank linie mellem de to webadresser, og ikke nok med det - den laver heller ikke www.sharksforum.com om til et link.
I andre situationer fjerner den dobbelt linieskift før og efter links, osv.
Er der nogen, der kan fortælle mig, hvad det er, der går galt med behandlingen af linieskift i koden?
Mvh
Bjørn Amdi Sloth
P.S.: Koden er noget jeg har sakset, og jeg FORSTÅR den ikke særligt godt, så hvis det kan simplificeres lidt, så ville jeg blive glad ;-)