Попробуйте следующее регулярное выражение (взято из исходного кода jQuery).
$data = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi', '', $data);
И прежде чем кто-то скажет мне, что Regexes + HTML - это злая комбинация: вы правы, но в данном конкретном случае это совершенно правильно, поскольку теги скриптов имеют определенное поведение, например, что первый </script>
закроет тег сценария; независимо от того, находится ли он внутри кавычек и т. д.
Однако, если вы планируете делать что-то еще с данными HTML, используйте анализатор HTML!