使用preg_replace创建链接可点击

时间:2015-11-21 18:40:47

标签: php preg-replace

我想让我的链接自动点击,但它不起作用。

这是我的代码:

$val['message'] = preg_replace('#https?://(w{3}.)?([a-zA-Z0-9_-]{1,20}(.[a-zA-Z0-9_-]{1,10}))(/[a-zA-Z0-9_-]{1,12}(/[a-zA-Z0-9_-]{1,12}))?(/([a-zA-Z0-9_-]{1,20})(.[a-zA-Z0-9_-]{1,7}))?(\?[a-zA-Z0-9_-]{1,7}=[a-zA-Z0-9_-]{1,7}(&[a-zA-Z0-9_-]{1,7}=[a-zA-Z0-9_-]{1,7}))?#is', '$0', $val['message']);

(这是我的preg事情,但有线:)

'https?://
    (w{3}.)?
    ([a-zA-Z0-9_-]{1,20}(.[a-zA-Z0-9_-]{1,10}))
    (/[a-zA-Z0-9_-]{1,12}(/[a-zA-Z0-9_-]{1,12}))?
    (/([a-zA-Z0-9_-]{1,20})
    (.[a-zA-Z0-9_-]{1,7}))?
    (\?[a-zA-Z0-9_-]{1,7}=[a-zA-Z0-9_-]{1,7}
    (&[a-zA-Z0-9_-]{1,7}=[a-zA-Z0-9_-]{1,7}))?

我也试过这个:

$val['message'] = preg_replace("#(([\w]+?://[\w#$%&~.-;:=,?@[]+])(/[\w#$%&~/.-;:=,?@[]+])?)#is", "$1", $val['message']);

但不适用于https://www.youtube.com/watch?v=videolink

等链接

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式,为我工作:

(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?

答案 1 :(得分:1)

为什么每个人都想尝试为此制作自己的正则表达式?链接链接很难处理很多边缘情况,更不用说应该或不应该包含在链接中的内容,例如。

  

你在谈论youtube.com吗?

     

我喜欢ASP.net语言

     

我想知道www.stackoverflow.com是什么链接

     

圆括号是一个特别痛苦的例子:例如:http://example.com/?auth=gH;2($ Hd)DA0; QAb)

除此之外:在上面的最后一行中,StackOverflow的预览部分将所有内容链接到最后一个结束括号,但在提交后它只链接到第一个标点符号括号。帮助证明我的观点,即尽管如此努力才能保持正确和稳定!

最好使用已建立的东西,例如:

https://github.com/misd-service-development/php-linkify

对于更快速的东西:

http://buildinternet.com/2010/05/how-to-automatically-linkify-text-with-php-regular-expressions/