First of all, you need to escape—or even better, replace—the delimeters as explained in the other answers.
preg_replace('~((www|http://)[^ ]+)~', '<a href="\1">\1</a>', $str);
Secondly, to further improve the regex, the $n
replacement reference syntax is preferred over \\n
, as stated in the manual.
Drittens verwenden Sie unnötige Klammern, die nur die Dinge verlangsamen. Sie loswerden. Vergessen Sie nicht, $1
zu $0
zu aktualisieren. Falls Sie sich wundern, sind dies nicht einfangende Klammern: (?:)
.
preg_replace('~(?:www|http://)[^ ]+~', '<a href="$0">$0</a>', $str);
Schließlich möchte ich [^ ]+
mit dem kürzeren und genauer \S
, ersetzen, die das Gegenteil von \s
ist. Beachten Sie, dass [^ ]+
keine Leerzeichen erlaubt, aber Zeilenumbrüche und Tabulatoren akzeptiert! \S
nicht.
preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $str);
Dup verwenden: http://stackoverflow.com/ Fragen/507436/how-do-i-linkify-URLs-in-String-mit-PHP –