PHP:如何从一大块文本中获取URL?

时间:2009-03-11 18:47:20

标签: php regex url bit.ly

假设我有一个充满Twitter帖子的大型RSS源,它们都是纯文本。很多帖子都包含网址,我希望将这些网址转换为链接。

所以我有一个等于的变量:

  

按行业,数量和日期可视化裁员。期待看到类似的招聘趋势。 http://bit.ly/XBW4z

我希望它变成:

  

按行业,数量和日期可视化裁员。期待看到类似的招聘趋势。 http://bit.ly/XBW4z

我怎么能这样做?当谈到正则表达式及其同类时,我没用,所以非常感谢帮助!

6 个答案:

答案 0 :(得分:2)

取决于您想要匹配的内容

一个漂亮,简单的正则表达式

http\://[a-zA-Z0-9./?&_\-]*

哪个匹配任何以http://开头的网址,并且只包含[]中的字符 - A到Z,0到9,-.,{{ 1}},/?

如果您想与其他协议(&https等)匹配,可以使用

(http|ftp|anyotherprotocolyouwant)\://[a-zA-Z0-9./?&_\-]*

如果您想支持更多字符,只需将其添加到ftp

更新:忘记大写支持! D'哦

答案 1 :(得分:2)

即使我想要一个......检查search result中的第一个链接。它很老了!

和BTW看看RHS ..我们有类似的问题。 Recognize URL in plain text regex for url and image within a text or html

答案 2 :(得分:1)

好的,这里的问题(regex for url and image within a text or html)有一个莫名其妙的标题,但在底部是一个有用的答案。至少,它适用于我和我的案例!

$text = preg_replace('@(http://([\w-.]+)+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?)@', 
                 '<a href="$1">$1</a>', $text);

答案 3 :(得分:1)

查看preg_replace函数。所以像这样:

$regex_url = "((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";

preg_replace($regex_url, '<a href="$1">$1</a>', $your_input_string);

来自以下网址的正则表达式:http://www.geekzilla.co.uk/view2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm

答案 4 :(得分:1)

只是添加一些信息...在phpclass.org上检查这个类,将解决你的问题......这个类会找到链接并将它们转换为...

http://www.phpclasses.org/browse/package/6114.html

答案 5 :(得分:0)

有正则表达式匹配有效的URL。例如the complete regular expression for URLs,它来自URL的语法定义。

但明确声明这些比尝试找到它们更好。因为在某些情况下无法区分,如果某些字符是URL的一部分或只是文本。