我的PHP preg_match表达式不起作用

时间:2010-10-01 06:09:14

标签: php regex preg-match eregi

我尝试将“eregi”表达式直接转换为“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);

1 个答案:

答案 0 :(得分: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()

  • 你的正则表达式不是很强大。如果您要验证网址,则可以改为使用filter_var()

    filter_var('example.com', FILTER_VALIDATE_URL);