You have to escape all occurances of / inside the outer / delimiters of your regex.
So you are probably looking for this:
preg_replace("/\\[img]([^\\[]*)\\[\/img]/",
"<img src=\"\\1\" border=\"0\">",
$text);
Otherwise the regex engine will treat the expression as terminated here at the second /:
/\\[img]([^\\[]*)\\[/
Whatever follows will be treated as modifiers to the expression. i and m do exist, g does not exist. That is why an error is thrown whilst compiling the regex.
Alternatively you can use another delimiter character beside /. But you have to make sure that character does not occur unescaped inside the expression itself. If the expression is not a literal string but comes from a variable then the preg_quote() function comes in handy.