Попробуйте:
$text = preg_replace('/\[iframe=(.*?)x(.*?)\](.*?)\[iframe\]/ms',
'<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>',
$text);
В \[\/iframe\]
было несколько нежелательных слешей, которые нужно было изменить на \[iframe\]
EDIT:
На самом деле ваша входная строка выглядит неправильно, так как у нее нет закрывающего тега iframe:
$text = '[iframe=200x200]http://stackoverflow.com[iframe] ';
должно быть
$text = '[iframe=200x200]http://stackoverflow.com[/iframe] ';
В тех случаях, когда ваша строка содержит /
, вы можете использовать другой разделитель, чтобы избежать экранирования /
, найденного в строке. Что-то вроде:
$text = preg_replace('#\[iframe=(.*?)x(.*?)\](.*?)\[/iframe\]#ms',
'<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>',
$text);