preg_replace()[function.preg-replace]:/ home /中的未知修饰符'/'

时间:2012-05-01 08:31:54

标签: php regex bbcode

在我的网站中,我想用其他链接替换链接

www.abc.comhttp://abc.com将替换为

http://www.XXXXXX.com/sonal?www.abc.com

http://www.XXXXXX.com/sonal?http://abc.com

所以我使用这段代码,但是这段代码给出了一些错误

  

Warning: preg_replace() [function.preg-replace]: Unknown modifier '/'   in /home/XXXXX/public_html/YYYYYYYYY/KKKKKK.php on line 495

$search_array = array(
   "/\[url]www|http://.([^'\"]*)\[\/url]/iU",
   "/\[url]([^'\"]*)\[\/url]/iU",
   "/\[url=www|http://.([^'\"\s]*)](.*)\[\/url]/iU",
   "/\[url=([^'\"\s]*)](.*)\[\/url]/iU"
);
$replace_array = array(
   "<a href=\"http://XXXXXX.com/sonal?.\\1\" target=\"_blank\" rel=\"nofollow\">www.   \\1</a>",
   "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">\\1</a>",
   "<a href=\"http://XXXXXX.com/sonal?.\\1\" target=\"_blank\" rel=\"nofollow\">\\2</a>",
   "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">\\2</a>"
);

$msg = preg_replace($search_array, $replace_array, $msg);
return $msg;

2 个答案:

答案 0 :(得分:6)

解决这个问题的方法很少

逃避“/”

$search_array = array(
  "/\[url]www|http:\/\/.([^'\"]*)\[\/url]/iU",
  "/\[url]([^'\"]*)\[\/url]/iU",
  "/\[url=www|http:\/\/.([^'\"\s]*)](.*)\[\/url]/iU",
  "/\[url=([^'\"\s]*)](.*)\[\/url]/iU"
);

或使用不同的正则表达式分隔符,如“#”

$search_array = array(
  "#\[url]www|http://.([^'\"]*)\[\/url]#iU",
  "#\[url]([^'\"]*)\[\/url]#iU",
  "#\[url=www|http://.([^'\"\s]*)](.*)\[\/url]#iU",
  "#\[url=([^'\"\s]*)](.*)\[\/url]#iU"
);

答案 1 :(得分:4)

"/\[url]www|http://.([^'\"]*)\[\/url]/iU",
 ^               ^^                  ^

您需要将中间的两个//转义为\/\/,或者更好的是,为正则表达式使用不同的分隔符:

"~\[url]www|http://.([^'\"]*)\[/url]~iU",