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に置き換える方法。
preg_replace('~((www|http://)[^ ]+)~', '<a href="$1">$1</a>', $str);
第3に、キャプチャカッコを使用すると、不必要に遅くなるだけです。それらを取り除く。 $1
を$0
に更新することを忘れないでください。あなたが不思議に思われる場合には、これらは非キャプチャ括弧((?:)
)です。
preg_replace('~(?:www|http://)[^ ]+~', '<a href="$0">$0</a>', $str);
最後に、私は\s
の反対で短く、より正確な\S
、と[^ ]+
を置き換えます。 [^ ]+
は空白を許可しませんが、改行とタブを受け入れることに注意してください。 \S
はありません。
preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $str);
にDUPの\ Sを使用する必要があります。http://stackoverflow.com/を質問/ 507436/how-do-i-linkify-urls-in-a-string-with-php –