PHP:如何从一段文本中提取URL?

4
假设我有一个包含推特帖子的大型RSS源,它们都是纯文本。很多帖子包含URL,我希望这些URL变成链接。
所以我有一个变量等于:
可视化裁员行业、数量和日期。期待看到类似的招聘趋势。http://bit.ly/XBW4z
我想把它变成:
可视化裁员行业、数量和日期。期待看到类似的招聘趋势。http://bit.ly/XBW4z 我该怎么做?当涉及到正则表达式及其类似物时,我无能为力,因此非常感谢您的帮助!

糟糕!StackOverflow自动将我的URL转换为链接了!好的,假装上面的第一个引用块没有链接。只有文本! - Eileen
也许你应该问Joel :) - Robert Elwell
6个回答

2

取决于您想匹配什么

一个简单的正则表达式是

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

它将匹配任何以http://开头并且只包含在[]中的字符 - A到Z,0到9,-./?&的URL。

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

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

如果您想支持更多字符,请将它们添加到[]中。

更新:忘记了大写字母的支持!糟糕


数字或其他有效字符怎么办? - Gumbo
好的,那就是正则表达式。我该如何将其应用于我的文本块变量?我是使用正则表达式还是preg_replace,还是其他什么方法?(我可不是白说自己对正则表达式没用...) - Eileen
有些人遇到问题时,会想:“我知道,我可以使用正则表达式。”现在他们有两个问题... - configurator
1
哈!我的想法通常是:“哦,该死,也许这需要一个正则表达式”。 - Eileen
我认为这个表达式无法正确处理查询参数。 - Boden

2

哇,其实这是我第一次看到有人发布谷歌链接而没有被抨击。 - Tomalak
@Tomalak..我看到有人大喊不要使用谷歌搜索!请展示你所说的问题。我想看一下;-) - Shoban

1

但仅限于您的情况。像 http://example.com/foo-barhttp://example.com/foo#bar 这样的 URL 不会匹配。 - Gumbo
@Eileen:嗯...底部的“有用答案”已经被投票-1了。这至少暗示着它可能存在缺陷。 - Tomalak
真的,就像我说的,它适用于我所有的情况,而且除了 Boden 以外,在所有提出的答案中,这是唯一一个实际显示如何在 PHP 中执行替换的答案。给我复杂(但完美!)的正则表达式没有附上 PHP 让它工作也是无用的。 - Eileen

1

1

0

有正则表达式可以匹配有效的URL。例如URL的完整正则表达式,它是从URL的语法定义中派生出来的。

但最好明确声明它们,而不是试图找到它们。因为有些情况下无法区分某些字符是URL的一部分还是纯文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接