PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 179


while  (<DATA>)   {


6 3  Поиск слов   187

chomp

if (/T\W\dJ+$/)  }

print    $_   alphabetic\n } else [

print    $_    line noise\n

__END__ silly fa3ade couperate nico Renne Molmre hxanoglobin nanve tschbfl random1stuff#here

> Смотри также---------------------------------------------------------------------------------------------

Описание работы с локальным контекстом в perllocale(l), страница руковод­ства /оса/е(3) вашей системы, рецепт 6 12

6.3. Поиск слов

Проблема

Требуется выделить из строки отдельные слова

Решение

Хорошенько подумайте, что должно считаться словом и как одно слово отделяет­ся от остальных Затем напишите регулярное выражение, в котором будут воплоще­ны ваши решения Например

/\S+/       # Максимальная серия байтов не являющихся пропусками /[A-Za z -]+/ # Максимальная серия букв апострофов и дефисов

Комментарий

Концепция «слова» зависит от приложения, языка и входного потока, поэтому в Perl не существует встроенного определения слов Слова приходится собирать вручную из символьных классов и квантификаторов, как это сделано выше Во втором примере мы пытаемся сделать так, чтобы  shepherd s   и   sheep-sheering воспринимались как отдельные слова

У большинства реализаций имеются ограничения, связанные с вольностями

письменного языка Например, хотя второй шаблон успешно опознает слова

spank d  и  counter-clockwise , он выдернет  rd  из строки  23rd Psalom   Чтобы


188   Глава б • Поиск по шаблону

повысить точность идентификации слов в строке, можно указать то, что окружа­ет слово. Как правило, указываются метасимволы границ1, а не пропусков:

/\b([A-Za-z]+\b/   # Обычно наилучший вариант

/\s([A-Za-z]+)\s/   # Не работает в конце строки или без знаков препинания

В Perl существует метасимвол \w, который совпадает с одним символом, разре­шенным в идентификаторах Perl. Однако идентификаторы Perl редко отвечают нашим представлениям о словах — обычно имеется в виду последовательность алфавитно-цифровых символов и подчеркиваний, но не двоеточий с апострофа­ми. Поскольку метасимвол \Ь определяется через \w, он может преподнести сюрпри­зы при определении границ английских слов (и тем более — слов языка суахили).




Начало  Назад  Вперед



Книжный магазин