用正则表达式替换文本中的相同URL

时间:2012-02-25 13:32:49

标签: php regex hyperlink str-replace

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

   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);
         }
     }

当我在任何地方输入相同网址的两倍时问题就出现了。

例如。

google.com text text google.com

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

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

1 个答案:

答案 0 :(得分:1)

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