【问题标题】:PHP: how to grab an URL out of a chunk of text?PHP:如何从一大块文本中获取 URL?
【发布时间】:2010-10-12 18:13:32
【问题描述】:

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

所以我有一个变量等于:

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

我希望它变成:

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

我怎么能这样做?当涉及到正则表达式及其同类时,我毫无用处,因此非常感谢您的帮助!

【问题讨论】:

  • 开枪! StackOverflow 自动将我的 URL 变成了一个链接!好的,假设上面的第一个块引用没有链接。只是文字!
  • 是的,也许你应该问乔尔 :)

标签: php regex url bit.ly


【解决方案1】:

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

顺便说一句,看看 RHS.. 我们有类似的问题。 Recognize URL in plain text regex for url and image within a text or html

【讨论】:

  • 哇,实际上这是我第一次看到没有因为发布 Google 链接而受到抨击的人。
  • @Tomalak .. 我看到有人因为不使用谷歌搜索而大喊大叫!告诉我你正在谈论的问题。我想看看;-)
【解决方案2】:

取决于你想匹配什么

一个不错的简单正则表达式是

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

这将匹配任何以http:// 开头并且仅包含[] - A 到Z、0 到9、-./?、@987654327 中的字符的url @。

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

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

如果您想支持更多字符,只需将它们添加到[]

更新:忘记支持大写!呵呵

【讨论】:

  • 数字或其他有效字符呢?
  • 好的,这就是正则表达式。我如何将它实际应用于我的文本块变量?我是在使用正则表达式,还是 preg_replace,还是什么? (我并没有说我对正则表达式毫无用处......)
  • 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题......
  • 哈!我的想法通常是,“哦,废话,也许这需要一个正则表达式”
  • 我认为这个表达式不能正确处理查询参数。
【解决方案3】:

好的,这里的这个问题 (regex for url and image within a text or html) 有一个令人费解的标题,但在底部有一个有用的答案。至少,它适用于我和我的情况!

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

【讨论】:

  • 但就你的情况而言。 http://example.com/foo-barhttp://example.com/foo#bar 等 URL 不匹配。
  • @Eileen:嗯......“底部的有用答案”已被投票 -1。这至少暗示它可能存在缺陷。
  • 是的,但正如我所说,它适用于我的所有情况,并且除了 Boden 之外,它是所有建议的答案中唯一的答案,它实际上显示了如何在 PHP 中执行替换。如果没有 PHP 让它工作,给我复杂的(但完美的!)正则表达式是没有用的。
【解决方案4】:

查看 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);

URL 的正则表达式取自:http://www.geekzilla.co.uk/view2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm

【讨论】:

    【解决方案5】:

    只是为了添加一些信息...在 phpclass.org 上查看此类,将解决您的问题...此类将找到链接并将它们也转换...

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-30
        • 2016-10-14
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 2021-08-25
        相关资源
        最近更新 更多