Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Замена текста между двумя подстроками-границами, регулярные выражения в Perl

Ответить
Настройки темы
Замена текста между двумя подстроками-границами, регулярные выражения в Perl

Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Цитата:
тэг задаётся переменной $tag
исходная строка: 'sdzxcasdzxc <$tag> замени меня!!! </$tag> sdfsdfsdfsdf <$tag> и тут тоже!</$tag> sdfsdfsdfsdf'
функция транслита (уже есть) translit()

конечная строка : 'sdzxcasdzxc <$tag> zameni mena!!! </$tag> sdfsdfsdfsdf <$tag> i tut toje!</$tag> sdfsdfsdfsdf'
желательно регулярными выражениями.

Отправлено: 15:48, 05-08-2014

 

Аватара для Habetdin


Автор проектов


Сообщения: 3651
Благодарности: 1498

Профиль | Сайт | Отправить PM | Цитировать


Тишина, смотреть на codepad:
Код: Выделить весь код
#!/usr/bin/perl

$tag = 'div';
sub translit{
 return "Kina ne budet, translit ne zavezli";
}

$str = "beliberda\nbeliberda... <$tag>замени меня, трамвай!</$tag>\nhello\nlook: <$tag>еще один подлежащий\nзамене текст</$tag>";
print "Original: (multiline)\n$str\n\n";

$str =~ s/(<${tag}>)(.*?)(<\/${tag}>)/$1.translit($2).$3/egs;
print "Result:\n$str\n";
Цитата:
Original: (multiline)
beliberda
beliberda... <div>замени меня, трамвай!</div>
hello
look: <div>еще один подлежащий
замене текст</div>

Result:
beliberda
beliberda... <div>Kina ne budet, translit ne zavezli</div>
hello
look: <div>Kina ne budet, translit ne zavezli</div>

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке


Последний раз редактировалось Habetdin, 09-08-2014 в 16:45. Причина: пропавший бекслеш o.O

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:56, 08-08-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


спасибо! а я уже в дебри полез, свой xml-парсер писать начал!

если вдруг кому пригодится, я делал транслит такой

сам транслит
Код: Выделить весь код
sub translit { # tsrt
	no utf8;
	($_)=@_[0];
	s/ж/zh/g; s/Ж/ZH/g; s/ч/ch/g; s/Ч/CH/g; s/Ш/Sh/g; s/ш/sh/g; s/Щ/Sch/g; s/щ/sch/g;
	s/Я/YA/g; s/я/ya/g; s/Ю/YU/g; s/ю/yu/g; s/Ъ/``/g; s/ъ/``/g; s/Ь/J/g; s/ь/j/g;
	s/а/a/g; s/А/A/g; s/б/b/g; s/Б/B/g; s/в/v/g; s/В/V/g; s/г/g/g; s/Г/G/g;
	s/д/d/g; s/Д/D/g; s/е/e/g; s/Е/E/g; s/ё/e/g; s/Ё/E/g; s/з/z/g; s/З/Z/g;
	s/и/i/g; s/И/I/g; s/й/y/g; s/Й/Y/g; s/к/k/g; s/К/K/g; s/л/l/g; s/Л/L/g;
	s/м/m/g; s/М/M/g; s/н/n/g; s/Н/N/g; s/о/o/g; s/О/O/g; s/п/p/g; s/П/P/g;
	s/р/r/g; s/Р/R/g; s/с/s/g; s/С/S/g; s/т/t/g; s/Т/T/g; s/у/u/g; s/У/U/g;
	s/ф/f/g; s/Ф/F/g; s/х/h/g; s/Х/H/g; s/ц/c/g; s/Ц/C/g; s/ы/y/g; s/Ы/Y/g;
	s/э/e/g; s/Э/E/g; s/ /_/g; s/№/No/g;
	return $_;
} # tsrt
вывод кириллицы для виндовой консольки (под win работаю)
Код: Выделить весь код
sub frendly_cyrrilic { # frendly_cyrrilic
	no utf8;
	($_)=@_[0];

	s/А/\200/g;	s/Б/\201/g;	s/В/\202/g;	s/Г/\203/g;	s/Д/\204/g;	s/Е/\205/g; s/Ё/\360/g;	s/Ж/\206/g;	s/З/\207/g;	s/И/\210/g; s/Й/\211/g;
	s/К/\212/g; s/Л/\213/g;	s/М/\214/g;	s/Н/\215/g;	s/О/\216/g;	s/П/\217/g;	s/Р/\220/g; s/С/\221/g;	s/Т/\222/g;	s/У/\223/g;	s/Ф/\224/g;
	s/Х/\225/g;	s/Ц/\226/g;	s/Ч/\227/g;	s/Ш/\230/g;	s/Щ/\231/g;	s/Ъ/\232/g;	s/Ы/\233/g;	s/Ь/\234/g;	s/Э/\235/g;	s/Ю/\236/g;	s/Я/\237/g;
	
	s/а/\240/g;	s/б/\241/g;	s/в/\242/g;	s/г/\243/g;	s/д/\244/g;	s/е/\245/g;	s/ё/\361/g;	s/ж/\246/g;	s/з/\247/g;	s/и/\250/g;	s/й/\251/g;
	s/к/\252/g;	s/л/\253/g;	s/м/\254/g;	s/н/\255/g;	s/о/\256/g;	s/п/\257/g;	s/р/\340/g;	s/с/\341/g;	s/т/\342/g;	s/у/\343/g;	s/ф/\344/g;
	s/х/\345/g;	s/ц/\346/g;	s/ч/\347/g;	s/ш/\350/g;	s/щ/\351/g;	s/ъ/\352/g;	s/ы/\353/g;	s/ь/\354/g;	s/э/\355/g;	s/ю/\356/g;	s/я/\357/g;

	return $_;
} # frendly_cyrrilic

Последний раз редактировалось Тишина, 11-08-2014 в 19:10.


Отправлено: 18:59, 11-08-2014 | #3



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Замена текста между двумя подстроками-границами, регулярные выражения в Perl

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Замена текста между тегов vano42 Скриптовые языки администрирования Windows 5 09-08-2012 13:19
регулярные выражения Ginger Вебмастеру 60 21-03-2012 01:11
Разное - PHP - регулярные выражения: HELP GoldenOrb Программирование и базы данных 10 08-09-2008 16:47
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход