| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Локаль и RE. |
| Автор: Гость_Сергей 20.7.2004, 11:54 |
| Привет! Почему из-за русской буквы, стоящей после .+? неправильно работает RE? Дома в ActiveState Perl все работает правильно, а на американском сервере неправильно. Вот пример: $_='Результат поиска: найдено сайтов'; if (m!^Результат поиска.+?сайтов!m) - не находит. А замена с на \xF1 не помогает: if (m!^Результат поиска.+?\xF1айтов!m) - не находит. Если разделить пробелом, то уже находит: if (m!^Результат поиска.+? сайтов!m) Вот еще работающий вариант разделителя (прямо анекдот): if (m!^Результат поиска.+?\s{0}сайтов[^<]+<b>(\d+)</b>!m) Локаль выставляю так: use POSIX qw(locale_h); use locale; setlocale(LC_CTYPE, "ru_RU.cp1251"); И она работает (проверял в RE, uc и lc). Почему 8-мибитный символ влияет на результат? В других местах RE русские буквы не мешают работе даже без установки локали. Успехов! Сергей |
| Автор: korob2001 20.7.2004, 17:19 | ||
| if (m!^Результат поиска.+?сайтов!m) То, что отмеченно красным - удали. Должно получиться что-то типа этого: if (m!Результат поиска.+?сайтов!m) Вот рабочий пример:
Удачи. |