Анимация
JavaScript
|
Главная Библионтека Ниже приведено несколько примеров: Ad{5}/; » Пять щфр подряд /\s\w+\s/j \ Группа символов слов, окружеппых * символами пробела Но будьте внимательны! Последний шаблон не всегда соответствует слову, например символ подчеркивания, окруженный пробелами, также будет считаться словом. Кроме того, с помощью последнего шаблона будут найдены не все слова, а только те, которые окружены пробелами. При этом слова типа dont не будут найдены из-за апострофа. Ниже вам будет предложен гораздо лучший шаблон для поиска слов. Группировка и альтернация В регулярных выражениях можно объединять несколько шаблонов, так чтобы найденная строка соответствовала хотя бы одному из них. Это полезно, если, к примеру, необходимо проверить строку на наличие в ней слов dogs или cats. Для решения подобной проблемы служит операция альтернации, которая в регулярных выражениях задается символом , например: if(/ciogscats/) { print "В строке \$ говорится о домашних жявотныхХп"; . Альтернация - полезная вешь, но не всегда удобная, если нужно найти большое количество похожих слов. Пусть вам нужно найти одно из слов frog, bog, log, flog или clog, а выражение /frogboglogflogclog/ кажется вам слишком громоздким. Тогда нужно воспользоваться альтернацией только для начала строки. Вы можете попытаться использовать такой шаблон: Ничего не выйдет! С помощью данного шаблона не удастся добиться требуемого эффекта, потому что Perl не знает, что альтернация касается начальной части строки. Для решения этой проблемы необходимо воспользоваться группировкой регулярных выражений Perl с помощью символов скобок {). /(frtlflcl)og/; Допускается вложение скобок, а следовательно, и вложение групп. Предыдущий пример можно переписать и так: /(frbl (с)1)од/. В контексте списка оператор поиска по шаблону возвращает список частей найденного выражения, соответствующих группам шаблона. Каждая группа возвращает соответствующее ей значение в список, а если групп в шаблоне нет - возвращается просто 1. Вот пример: $ ="арр1е is red"; (Sfruit, $color)=/(.*)\si8\s(.*)/; В данном случае шаблон соответствует произвольной последовательности символов (она задана в виде первой группы), за которой расположен пробел, слово is, еще один пробел, а затем другая произвольная последовательность символов (она задана в виде второй группы). Значения частей строки поиска, соответствующие группам регулярного выражения, присваиваются элементам списка $fruitn Scolor, расположенного в левой части оператора присваивания. Анкеры Последние два метасимвола (могу поспорить, вы уже думаете: "Когд же они наконец закончатся?!") - это анкеры. С их помощью можно указать, в каком месте строки (в начале или в конце) должно быть найдено соответствие с шаблоном. Первый из этих анкеров - символ вставки ("). Этот символ; помешенный в начале регулярного выражения, говорит о том, что соответствие шаблону должно быть найдено в начале строки. Например, /"video/ соответствует слову video, но только если оно находится в начале строки. Его двойник - символ доллара ($). Этот символ, помещенный в конец регулярного выражения, говорит о том, что соответствие шаблону должно быть найдено в конце строки. Например, /earth$/ соответствует слову earth, но только если оно находится в конце строки. Ниже приведено несколько примеров (табл. 6.4). Таблица 6.4. Пример использования анкеров Шаблон Описание /"Help/ Находит строки, начинающиеся с Help /"Frankly. *darn$/ Находит строки, начинающиеся со . слова Frankly и заканчивающиеся словом darn. Между этими словами может быть все, что угодно /"hysterias/ Находит строки, состоящие только из слова hysteria /"$/ Находит пустые строки Находит начало любой строки. Шаблон /$/ имеет похожее действие Подстановка Поиск по определенному шаблону во введенных строках - это только полдела. Часто требуется модифицировать найденные данные. Для этого можно воспользоваться оператором подстановки е /,хотя это далеко не единственный способ. Синтаксис этого оператора выглядит так: в/ й9бпов поиска1строка замены1; . По умолчанию оператор подстановки ишет. строку,.. соответствующую шаблону в неременной 5 , и заменяет ее на строку занеиа. Оператор подстановки возвращает количество выполненных замен или 0, если ни одной замены не бгло сделано. Вот пример: $ ="Our house is in tiie middle of our street"; s/middle/end/; J Сейчас: Our house is in the end of our street s/in/at/; f Сейчас: Our house is at the end of our street if (s/apartment/ccndo/) { Этот код не будет выполняться, см. примечание. В этом примере подстановки произошли, как вы и ожидали. Слово было изменено на end, a in - на at. Блок кода оператора if не выполняется, так как в переменной $ отсутствует слово ment, поэтому подстановка невозможна. Часть I. ОcноEl Perl В операторе подстановки кроме обратной косой черты можно использовать и другие символы-ограничители. Для этого просто поместите требуемый символ-ограничитель сразу же после префикса s, как показано ниже: sfBtreetlavenue*; Упражнение: очистка входнтх данных Подстановка данных вслепую, без проверки правильности выполнения команды (как в примере из предтдущего раздела), - обычная практика при обработке массивов данных. При этом программа считывает исходные данные с клавиатуры или файла и форматирует их в надлежащем виде для последующей обработки. В листинге 6.1 приведен простой пример программы демонстрации обработки данных, которая вычисляет массу тела на Луне по его Земной массе. Наберите в текстовом редакторе программу из листинг,! и сохраните ее под именем Moon. Сделайте файл программы выполняемым с помощью инструкций, приведенных на 1-м занятии, "Начало работы с Perl". Пример выходных данных этой программы приведен в листинге 6.2. сп 6.1. огрма выле масс! пела на Луне 3: print "Введите массу тепа:"; 4: $ =<STDIH>; chomp; 5: s/s+Z/; t ЗлжтБробегы в штате сгрска б: 7: if (т/(1Ьв?кг?1снлогра11М?фунт?)/1) { 8: if (в/\8*(1Ь8?фунт?),* 1) { 9: S .=0.4536; 10: } else-"{ 11: в/\в*{1сг?1кипогра1ш?).* ; 12: } 13:} 14:print "Масса тепа на Луне: , $ *. 16667, " кг\п-; 1сп 6.2. /ер выпа ограммы! Mbcn 1: $ perl Mm 2: Введите массу тела;4 кг 3: Масса тела на Пуне: 0.66668 кг 4 : $ perl Mm 5: Введите массу тела:6 фунт 6: Масса тепа на Пуне: 0.453609072 кг Проведем анализ программы. • Строка 1. В этой строке находится путь к интерпретатору (измените его в соответствии с конфигурацией вашей системы) и ключ -w. Всегда включайте режим выдачи предупреждений! 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |