Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Замена текста между двумя подстроками-границами, регулярные выражения в Perl (http://forum.oszone.net/showthread.php?t=286035)

Тишина 05-08-2014 15:48 2385387

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

Цитата:

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

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

Habetdin 08-08-2014 11:56 2386513

Тишина, смотреть на 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>

Тишина 11-08-2014 18:59 2387850

спасибо! а я уже в дебри полез, свой 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



Время: 23:21.

Время: 23:21.
© OSzone.net 2001-