Перейти к содержанию

Рекомендуемые сообщения

Guten Abend meine Damen und Herren!

В общем, родилась такая задача:

есть HTML-файл вида:

text <!-- comment --><!-- script --><!-- script
script script script --> text

нужно:

выводить text, оставлять в коде <!-- comment -->, удалять из кода и выполнять <!-- script -->

В общем, трабла у меня с регулярными выражениями...

не могу я совладать с этой пакостью...

Ссылка на комментарий
Поделиться на другие сайты

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

По-моему, так...

Ссылка на комментарий
Поделиться на другие сайты

1. На самом деле, в строке может быть не три комментария, а больше или мень ше (в этом-то и была трабла)

2. Комментарий может начинаться в одной строке, а заканчиваться в другой и не обязательно, что в следующей.

3. Траблу я решил Smile

Решение:

1. запихнуть файл не в массив, а в обычную переменную

2. Требует доработки, но работает Smile

скрипт в 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; } -->

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...