preg_replace () : Неизвестный модификатор '/' in / home /

на моем веб-сайте я хочу заменить ссылки на некоторые другие ссылки, подобные этому

www.abc.com или http://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; 

Существует несколько способов решить эту проблему.

Escaping "/"

 $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" ); . $search_array = array( "#\[url]www|http://.([^'\"]*)\[\/url]#iU", "#\[url]([^'\"]*)\[\/url]#iU", "#\[url=www|http://.([^'\"\s]*)](.*)\[\/url]#iU", "#\[url=([^'\"\s]*)](.*)\[\/url]#iU" ); 
 "/\[url]www|http://.([^'\"]*)\[\/url]/iU", ^ ^^ ^ 

Вам либо нужно избегать двух // в середине до \/\/ , либо, лучше, использовать разные разделители для регулярного выражения:

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