|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitry Koteroff 2:5020/400 16 Jul 2002 01:35:25 To : Roman =KRoN= Karshiev Subject : Re: Регексп - замена по хешу. -------------------------------------------------------------------------------- Здравствуйте, Roman. 15 июля 2002 года, понедельник, 11:01. Вы написали: > Есть хеш с парами "что менять"=>"на что менять". > Hапример, аббревиатуры заменять на код их расшифровки или ключевые > слова на ссылки на них. Менять надо всюду, кроме внутренностей ссылок и > тэгов. Это довольно стандартная задача, в общем случае (для тысяч регулярных выражений) решается при помощи создания замыканий (предварительной компиляции кода): %regexps = ( qr/тра/is => "ТрА", qr/ля/is => "лЯ", ); # сначала компилируем несколько функций - по одной # для каждого выражения. my @func=(); while(my ($re,$to)=each(%regexps)) { push @func, sub { s/$re/$to/sg }; } # затем читаем строки по одной и заменяем. while(<>) { # проходим по всем выражениям и заменяем их в $_ foreach my $f (@func) { &$f() } print $_; } -- С уважением, Дмитрий Котеров (dk@dklab.ru), ведущий программист (http://www.dklab.ru). --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65770aee93ba.html, оценка из 5, голосов 10
|