Xpoint
   [напомнить пароль]

regexp: вырезать встроенные скрипты из html

Метки: [без меток]
2013-07-15 11:45:16 [обр] August[досье]

Всех приветствую.
Считал, что в регэкпах разбираюсь достаточно хорошо, но решить задачу так и не получилось, поэтому прошу помощи у сообщества.
Задача состоит в следующем: из html-документа требуется вырезать все встроенные js, кроме одного, если длина его кода не превышает 200 символов и не трогать подключаемые скрипты.
Иными словами, если в документе встретится код вида

<script src=...></script>

его требуется оставить.
Если в документе встретится код вида

<script>
/*
код
*/
</script>

требуется вырезать все, кроме первого и только если его длина кода не превышает 200 символов (превышает - вырезать).
Вот мой код, для поиска встроенных скриптов и он не работает как надо, код захватывает весь текст от первого <script> до последнего </script>, модификаторы жадности не помогают:

<?
   $c = file_get_contents ("file");
   preg_match ("!<script.*?\>.{200,}?</script>!is", $c, $r);
   print_r ($r);
?>
спустя 23 часа [обр] Lynn «Кофеман»(98/571)[досье]

Выражение !<script.*?\>.{200,}?</script>! требует не менее 200 символов между открывающим и закрывающим тегом.

Я бы сделал так !<script.*?\>(.*?)</script>! и отдельно проверял сколько символов попало в capture.
Как-то так:

  $c = preg_replace_callback("!<script.*?\>(.*?)</script>!is", function($matches) { ... }, $c);
спустя 8 часов [обр] August[досье]
не хотелось бы делать дополнительную обработку, да и этот код что-то не работает как задумано.
спустя 1 час 26 минут [обр] August[досье]
ну в общем, сделал через callback-функцию, пусть так и останется
Powered by POEM™ Engine Copyright © 2002-2005