Forum Webscript.Ru
Программирование => Perl => Тема начата: Forza от 23 Мая 2004, 11:57:43
-
Здравствуйте!
При выводах результата поиска по сайту иногда красиво выделять в выводимом тексте ключевые слова, по которым осуществлялся поиск.
Как это удобно сделать в Perl с соблюдением исходного регистра букв? Например, если $keyword = “Red”; то замена по $page =~ s/$keyword/$keyword<\\/b>/ig заменит слово “Red” в любых регистрах (reD, ReD и т.д.), но она заменит его не на те регистры, которые были в тексте изначально, а на тот, который прописан в $keyword – “Red”. Как это исправить?
Конечно, можно написать скрипт, который перебирает любые сочетания регистров букв в $keyword и заменяет их без параметра игнорирования регистра /i. Но это не оптимально, да? :)
И как сделать чтобы параметр /i влиял на работу с кириллицей при кодировке Win-1251? Где она прописывается в Perl?
-
Я сам нашёл ответ на первый вопрос. Выделение с сохранением исходного регистра можно делать как $page =~ s/($keyword)/$1<\\/b>/ig.
Вопрос про указание кодировки для грамотной работы с кириллицей остаётся в силе.
-
use locale;
-
use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");
...........
s!$&!$&!;
-
AnnA,
а для чего нужны:
AnnA:
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");
?
У меня всё и без них заработало. Было достаточо только use locale;
-
http://www.webcode.ru/cgi/locale/