Diğer yanıtlar açıklandığı gibi her şeyden önce, kaçmak veya daha iyi, yerini-delimeters gerekir.
preg_replace('~((www|http://)[^ ]+)~', '<a href="\1">\1</a>', $str);
İkinci olarak, daha da geliştirmek için düzenli ifade, $n değiştirme referansı sözdizimi manual belirtildiği gibi, \\n tercih edilir.
preg_replace('~((www|http://)[^ ]+)~', '<a href="$1">$1</a>', $str);
Üçüncü olarak, gereksiz tek şey yavaşlatır, yakalama parantez kullanıyor. Bunlardan kurtulun. $1 $0 güncellemek unutmayın. Eğer merak ediyorsanız, bu non-yakalama parantez şunlardır: (?: ).
preg_replace('~(?:www|http://)[^ ]+~', '<a href="$0">$0</a>', $str);
Son olarak, [^ ]+ \s tersi olan, daha kısa ve \S ile daha doğru değiştirmek. [^ ]+ boşluk izin vermediğini unutmayın, ama satırsonlarını ve sekmeleri kabul etmez! \S yok.
preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $str);