Forum Webscript.Ru

Программирование => Perl => Тема начата: Forza от 23 Мая 2004, 11:57:43

Название: Выделение слов особым шрифтом
Отправлено: 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?
Название: Выделение слов особым шрифтом
Отправлено: Forza от 23 Мая 2004, 12:58:47
Я сам нашёл ответ на первый вопрос. Выделение с сохранением исходного регистра можно делать как $page =~ s/($keyword)/$1<\\/b>/ig.

Вопрос про указание кодировки для грамотной работы с кириллицей остаётся в силе.
Название: Выделение слов особым шрифтом
Отправлено: synthez от 23 Мая 2004, 14:26:10
use locale;
Название: Выделение слов особым шрифтом
Отправлено: AnnA от 24 Мая 2004, 12:04:02
use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");
...........
s!$&!$&!;
Название: Выделение слов особым шрифтом
Отправлено: Forza от 24 Мая 2004, 12:37:18
AnnA,

а для чего нужны:
Цитировать
AnnA:
use POSIX qw(locale_h);
setlocale(LC_CTYPE,"ru_RU.CP1251");
?

У меня всё и без них заработало. Было достаточо только use locale;
Название: Выделение слов особым шрифтом
Отправлено: AnnA от 24 Мая 2004, 13:01:13
http://www.webcode.ru/cgi/locale/