Конвертировать Eregi_replace в preg_replace в PHP - PullRequest
0 голосов
/ 13 апреля 2010

Мне нужна помощь в преобразовании 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 Ответ

6 голосов
/ 13 апреля 2010

Начните с просмотра списка различий между выражениями 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. Возможно, вы захотите проверить это более тщательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...