Я хочу удалить все теги scipt с HTML-страницы, кроме тех, которые содержат слово foo
или bar
.Итак, я пришел с этим утверждением:
$content = preg_replace('#<script((?!foo|bar).)*?</script>#is', '', $content);
echo "Last error: " + preg_last_error();
Это работает на небольших страницах.Но теперь у меня есть страница с 30 большими тегами сценария, и она не работает.Я получаю ошибку: PREG_BACKTRACK_LIMIT_ERROR
Поэтому я думаю, что мне нужно улучшить свое регулярное выражение, чтобы предотвратить эту ошибку, потому что это утверждение работает:
$content = preg_replace('#<script.*?</script>#is', '', $content);
Но это утверждениеудаляет все теги скрипта, хотя я хочу сохранить некоторые из них.
Есть решение об увеличении pcre.backtrack_limit
, но я не хочу идти по этому пути.Имхо должно быть лучшее решение.
Дело в том, что я не знаю, как это исправить, потому что проблема с регулярным выражением, насколько я вижу.
Не могли бы выпомогите мне сделать регулярное выражение лучше, чтобы эта ошибка не возникала?