代码之家  ›  专栏  ›  技术社区  ›  alexyorke

在PHP中将eregi_replace转换为preg_replace

  •  -2
  • alexyorke  · 技术社区  · 15 年前

    我需要帮助将eregi_replace转换为preg_replace(因为在php5中,它已贬值):

      function makeClickableLinks($text)
      {
      $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                            '<a href="\\1">\\1</a>', $text);
      $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                            '\\1<a href="http://\\2">\\2</a>', $text);
      $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',
                            '<a href="mailto:\\1">\\1</a>', $text);
      return $text;
      }
    

    (它将文本链接和电子邮件转换为超链接,以便用户可以单击它们)

    1 回复  |  直到 15 年前
        1
  •  6
  •   zombat    15 年前

    先看一下 list of differences 在手册中的posix和pcre表达式之间。

    如果表达式不复杂,一般来说,这意味着只需在表达式周围加上分隔符就可以避免 $pattern 参数,并切换到使用 preg 功能系列。在您的情况下,您可以这样做:

     function makeClickableLinks($text)
     {
     $text = preg_replace('/(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
                           '<a href="\\1">\\1</a>', $text);
     $text = preg_replace('/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/i',
                           '\\1<a href="http://\\2">\\2</a>', $text);
     $text = preg_replace('/([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i',
                           '<a href="mailto:\\1">\\1</a>', $text);
     return $text;
     }
    

    注意 / 图案周围的字符,以及 i 标记在分隔符之后。我很快测试了这个,它适用于一个基本的URL。你可能想更彻底地测试它。

    推荐文章