Hans R. Steiner Опубликовано 9 июля, 2005 Жалоба Поделиться Опубликовано 9 июля, 2005 Guten Abend meine Damen und Herren! В общем, родилась такая задача: есть HTML-файл вида: text <!-- comment --><!-- script --><!-- script script script script --> text нужно: выводить text, оставлять в коде <!-- comment -->, удалять из кода и выполнять <!-- script --> В общем, трабла у меня с регулярными выражениями... не могу я совладать с этой пакостью... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 9 июля, 2005 Жалоба Поделиться Опубликовано 9 июля, 2005 Hans R. Steiner писал(а) сб, 09 июля 2005 18:08 text <!-- comment --><!-- script --><!-- script script script script --> text В общем, трабла у меня с регулярными выражениями... не могу я совладать с этой пакостью... А такое не подойдет?: (.*)(<!--.*-->)<!--(.*)--><!--(.*)-->(.*) А потом оперировать с $1, $2 твт. По идее, должно получиться что-то вроде: для text1 <!-- comment1 --><!-- script1 --><!-- script2 script2 script2 script2 --> text2 $1 == text1 $2 == <!-- comment1 --> $3 == script1 $4 == script2 script2 script2 script2 $5 == text2 По-моему, так... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Hans R. Steiner Опубликовано 10 июля, 2005 Автор Жалоба Поделиться Опубликовано 10 июля, 2005 1. На самом деле, в строке может быть не три комментария, а больше или мень ше (в этом-то и была трабла) 2. Комментарий может начинаться в одной строке, а заканчиваться в другой и не обязательно, что в следующей. 3. Траблу я решил Решение: 1. запихнуть файл не в массив, а в обычную переменную 2. Требует доработки, но работает скрипт в index.pl sub include{ $str = `cat $val`; if ($str =~ /<!-- ?NorthScript ?{ (.*?) } ?-->/){ $str =~ s/<!-- ?NorthScript ?{ (.*?) } ?-->/northscript()/ge; }; return($str); }; sub northscript{ @array = split(/;/, $1); $i = 0; foreach $command (@array){ for ($command) { s/^\s+//; s/\s+$//; }; ($cmd,$val) = split(/ /, $command); eval "\@result[\$i] = $cmd(\"$val\");"; $i++; }; $ret = join('',@result); @result = (); return ($ret); }; ## Открываем шаблон $test = 'Hans R. Steiner'; $html = include($val='html/page'); eval "print \"$html\";"; Шаблон: Цитата: <!-- NorthScript { include html/head; include html/menu; include html/body; } --> <!-- NorthScript { include html/body; } --> Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.