【问题标题】:replace same url in text with regex用正则表达式替换文本中的相同网址
【发布时间】:2012-03-15 17:03:36
【问题描述】:

我正在使用以下代码在文本中添加指向 url 的链接...

   if (preg_match_all("#((http(s?)://)|www\.)?([a-zA-Z0-9\-\.])(\w+[^\s\)\<]+)#i", $str, $matches))
   {
         ?><pre><?php
         print_r($matches);
         ?></pre><?php
         for ($i = 0; $i < count($matches[0]); $i++)
         {
             $url = $matches[0][$i];
             $parsed = parse_url($url);

             $prefix = '';
             if (!isset($parsed["scheme"])){
                $prefix = 'http://';
             }


             $url = $prefix.$url;

             $replace = '<a href="'.$url.'" class="auto_link_color">'.$matches[0][$i].'</a>';

             $str = str_replace($matches[0][$i], '<a href="'.$prefix.$matches[0][$i].'" class="auto_link_color">'.$matches[0][$i].'</a>', $str);
         }
     }

当我在任何地方在文本中输入两次相同的 url 时,问题就出现了。

例如。

google.com text text google.com

它会在第一个链接上添加一个链接,然后搜索链接内的 google.com 并尝试在其中再次添加..

我如何确保它会单独添加链接而不会出现问题?

【问题讨论】:

  • 你需要匹配完整的链接。
  • 你可以看看我对Converting text to link的回答。
  • @rodneyrehm 我试过你的代码,但即使我输入简单的文本,它也会首先尝试添加 http://
  • 嗯,是的,当然。没有协议 (http://) 的链接将有一个相对于当前域的浏览器请求。这不是你想要的,所以我的替换功能会为你解决这个问题。
  • 它现在似乎可以工作了,另一个问题是它不适用于像 google.com google.fr 这样的文本...如何编辑您的正则表达式以使用没有 www 或 http 的网址第一?

标签: php regex hyperlink str-replace


【解决方案1】:

您可以使用preg_replace_callback() 可靠地处理单个匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2017-10-18
    • 2014-03-11
    • 2022-01-22
    • 2014-12-06
    • 2017-01-21
    相关资源
    最近更新 更多