Библиотека Интернет Индустрии I2R.ru |
|||
|
Perl для чайников (Учебник, ч. 3/3)Занятная всё таки штука - perl... Вот и вас это захватило, и вы продолжаете путь, полный самоистязания и бессонных ночей... Это всё конечно лирика, но и без этого нельзя... В этой части я расскажу вам о ещё одной основе перл - поиск по шаблону. Данная тема является основополагающей и пожалуй единственной по которой многие программисты во всем мире используют в своей работе именно перл. Начну немного издалека... Как вы знаете (или должны узнать) в интернете основой передаваемой инфомации является текст. С помоцью текста формируются html страницы, для осуществления интерактивности вы вводите текстовую информацию в соответствующие поля... Задумайтесь над следующим: сколько раз за всё время пользованием интернет вы заполняли различные формы? Выбирали из открывающихся списков интересующие вас темы? Иногда обработку таких данных можно осуществить с помощью JavaScript, но этот способ не всегда является применимым если речь идёт например о гостевой страничке или проверки регистрационных данных, в общем о том, что нельзя сделать на одной странице, без привлечения посторонних ресурсов. Здесь нам на помощь приходит перл, со своими богатыми возможностями по обработке текста (это и является его основной отличительной чертой и одновременно преимуществом). Итак представим себе некоторую абстратную задачу - принять от пользователя информацию и как-то на неё среагировать. Например мы просим пользователя ввести название своего любимого языка программирования (perl естественно:) и в соответствии с этим вывести ему фразу наподобии: "Молодец! Уважаю!". М-да... опять лирика... Тем не менее давайте рассмотрим как происходит обработка информации в этом случае. Основной вариант. Программа принимает значение "perl". Отлично. Обнаружить сходство мы сможем используя следующие приемы: $enter = "perl"; if ($enter eq "perl") { #стандартное сравнение print "Молодец!"; } else { print "Позор!"; } Или вместо второй строки можно написать: if ($enter =~ /perl/)... Казалось бы - какая разница? Однако если в первом случае мы используем стандартное сравнение, то во втором примере - поиск по шаблону. В данном случай шаблоном является /perl/ С помощью практически неограниченных возможностей поиска по шаблону (или как это ещё называется: использование регулярных выражений) мы можем значительно расширить возможности поиска. Допустим, пользователь проникся особым уважением к языку перл и ввел его с большой буквы. Первый вариант нам бы тогда не подошел, нам пришлось бы создавать новое условие для поиска Perl с большой буквы: if ($enter eq ""perl){ if ($enter eq "Perl") } else... Но в шаблоне нам достаточно добавить модификатор i и шаблон будет вылавливать слово perl невзирая на то какими буквами оно записано: /perl/i Пользователь может даже ввести "pErL" и программа всё равно найдет слово. К примеру скажу вам, что подобный трюк например на С++ занял бы не менее десятка строк. Далее представим себе случай, когда поьзователь мало знакомый с перл ввел pearl (жемчужина) вместо perl: /pea?rl/i В данном примере кострукция 'a?' говорит о том что нам подходит случай с буквой 'a' или без неё. А теперь представьте как эти два условия осуществить с помощью стандартного сравнения? Страшно? Как отдельный пример, не относящийся к нашей программе, рассмотрим замену найденных по шаблону данных. Допустим нам надо заменить в неком файле все слова 'cold' на 'heat' при этом естественно слова такие как 'colder' или 'ashcold' нам земенять ненадо. Замена с помощью регулярных выражений осуществляется в перл следующим методом: s/old/new/; То есть мы ищем в тексте 'old' и заменяем его на 'new'. Для нашего примера это будет выглядеть следующим образом: s/\bcold\b/heat/gi; Поясняю. В той части, где мы описываем фразу для поиска мы применяем ключ /b, который означает границу (начало или конец) слова. В конце у нас добавлены модификаторы g и i. С модификатором i вы уже знакомы, а g означает, что поиск надо проводить многократно. Т.е. если бы мы не поставили g, то был бы произведен поиск и замена только первого найденного cold, а остальные уже остались бы без изменения. Вот вы и познакомились с основами регулярных выражений. Относительного дальнейшего их изучения я могу привести усредненную цитату из всяких книг по перл: "Полное описание регулярных выражений заняло бы очент много места и поэтому для полного их описания пришлось бы выпускать отдельную книгу". Правы ребята... Главное не заучить несколько формул, а понять саму суть вопроса и тогда самостоятельное состовление шаблонов не представит для вас особого труда. В следующей главе мы вновь вернёмся к нашей программе и будем продолжать её улучшение, в том числе и за счет подпрограмм. |
|
2000-2008 г. Все авторские права соблюдены. |
|