Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Помогите составить регулярное выражение


Автор: Styler 19.3.2008, 02:11
При помощи LWP получаю в переменную содержимое страницы, которое нужно пропарсить.
Если быть точнее - необходимо поудалять лишнюю информацию, при этом сохранив все ява-скрипты которые есть в коде.

Выглядит он примерно так:

Код


...ненужный HTML

<script>Нужный яваскрипт 1</script>
<script>Нужный яваскрипт 2</script>

... нужный HTML

<script>Нужный яваскрипт 3</script>



Проблема состоит в том, чтобы выдрать из этого кода весь яваскрипт в какую то переменную.
После этого html код обрежется по границам нужного HTML и к нему будет добавлен выдранный яваскрипт.

Использовал вот такое выражение:
Код

$page =~ /<script(.*?)script>/g;


- но оно почему-то возвращает только "Нужный яваскрипт 1".

Подскажите пожалуйста, буду очень благодарен.

Автор: Styler 19.3.2008, 02:42
Вроде получилось выйти из положения вот так:
Код

      my @href = $page =~ /<script.*?script>/igs;
      my $content = "@href";


Но - подскажите - насколько вообще правилен сам подход к парсингу страницы?
Задача стоит в том, чтобы выдрать некоторую информацию с удаленного сервера, удалив лишнее, отобразить у себя, создав у пользователя иллюзию что эта информация размещена на моем сайте smile

Автор: amg 19.3.2008, 09:40
Цитата(Styler @  19.3.2008,  02:42 Найти цитируемый пост)
Вроде получилось выйти из положения вот так:
То же самое можно сделать чуть проще:
Код

my $content = $page =~ /(<script>.*<\/script>)/is;
Такой подход к парсингу страницы будет правильным только для простейших случаев. Например, все полетит, если вдруг среди "ненужного html" присутствует подстрока "<script>". Подход, гарантирующий от ошибок - воспользоваться каким-нибудь парсером html - их множество, поищите.

Автор: BurnerCode 19.3.2008, 09:58
perldoc HTML::Parser

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)