2010-10-01 3 views
0

Я попытался преобразовать выражение «eregi» прямо в выражение «preg_match».Мое выражение PHP preg_match не работает

$ACCEPT_CHARS = "a-z0-9_~#&;=./?+-"; 
$msg = preg_match("/ (http|https|ftp|gopher|news)://([$ACCEPT_CHARS]+)/i", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", $msg); 

Однако, я получаю:

Warning: preg_match() [function.preg-match]: Unknown modifier '&' in /var/www/comm.borealisbbi.org/includes/functions_parse.php on line 282 

Что я сделал не так?

Оригинальная линия:

$msg = eregi(" (http|https|ftp|gopher|news)://([$ACCEPT_CHARS]+)", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", $msg); 

ответ

2

Это из-за слэша в своем регулярном выражении /. Поскольку вы использовали их как разделители, механизм регулярных выражений ожидает, что выражение будет закончено после /. Вы можете избежать этого, или использовать другой разделитель:

$msg = preg_replace("~ (http|https|ftp|gopher|news)://([$ACCEPT_CHARS]+)~i", "<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>", $msg); 

Это сказал ...

  • Я не понимаю, почему вы используете preg_match() здесь. Я думаю, вы имели в виду preg_replace()?

  • Ваше регулярное выражение не очень надежное. Если вы подтверждения URL, вы могли бы пользователь filter_var() вместо:

    filter_var('example.com', FILTER_VALIDATE_URL); 
    
Смежные вопросы