Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Изучаем Perl - Шварц Р.

Шварц Р., Кристиансен Т. Изучаем Perl — Москва, 2002. — 324 c.
Скачать (прямая ссылка): izuchaemperl2002.djvu
Предыдущая << 1 .. 41 42 43 44 45 46 < 47 > 48 49 50 51 52 53 .. 124 >> Следующая

символа новой строки, слова barney и еще одного такого же символа. Таким
образом, данному образцу соответствует последовательность символов
fredxbarneyx, а не fredxbarneyy. Сравните это с
/fred.barney./;
где два обозначенных точками символа могут быть одинаковыми или разными;
роли это не играет.
Откуда взялась единица? Она обозначает первую заключенную в круглые
скобки часть регулярного выражения. Если таких частей больше, чем одна,
На самом деле для поиска буквы с в первой позиции понадобится больший
объем поиска с возвратом в операции *, но описание этого процесса не
представляет интереса, а работает он по такому же принципу.
7. Регулярные оыраження
113
то вторая часть (считая левые круглые скобки слева направо) обозначается
как \2, третья - как \3 и т. д. Например,
/а(.)Ь(.)c\2d\1/;
обозначает а, какой-то символ (назовем его #1), Ь, еще один символ
(назовем его #2), с, символ #2, d и символ #1. Таким образом, этот
образец соответствует, в частности, строке axbycydx.
Запоминаемая часть может состоять не только из одного символа. Например,
/а(.*)Ь\1с/;
обозначает а, любое количество символов (даже нуль), Ь, ту же
последовательность символов и, наконец, с. Следовательно, этот образец
совпадет со строкой aFREDbFREDc и даже со строкой abc, но не со строкой
аХХЬХХХс.
Дизъюнкция
Следующая групповая конструкция - дизъюнкция, т.е. a I b | с. Это значит,
что данный образец соответствует только одному из указанных вариантов (в
данном случае - а, b или с). Такая конструкция работает даже в том
случае, если варианты содержат несколько символов, как в образце
/songiblue/, что соответствует либо song, либо blue. (Для односимвольных
альтернатив определенно лучше будет использовать класс символов,
например, / [ abc ] /.)
Что, если бы мы хотели найти songbird или bluebird? Мы могли бы написать
/songbird I bluebird/, но часть bird не хотелось бы указывать дважды. Из
такой ситуации есть выход, однако вначале нам следует поговорить о
приоритете группирующих образцов, который рассматривается ниже, в разделе
"Приоритет".
Фиксирование образцов
Некоторые особые виды записи позволяют фиксировать образец относительно
позиции в строке, в которой ищется соответствие. Обычно при сопоставлении
образец "перемещается" по строке слева направо; сообщение о совпадении
дается при первой же возможности. Фиксирующие точки позволяют
гарантировать, что с образцом совпадают определенные части сравниваемой
строки.
Первая пара фиксирующих директив требует, чтобы определенная часть
символов, соответствующих образцу, была расположена либо на границе
слова, либо не на границе слова. Фиксирующая директива \Ь требует, чтобы
совпадение с образцом b происходило только на границе слова. Граница
слова - это место между символами, которые соответствуют предопределенным
классам \w или \w, либо между символами, которые соответствуют классу \w,
а также начало или окончание строки. Отметим, что все это больше
предназначено для работы с С, а не с английскими словами, но вполне
применимо и к словам. Например:
114
Йяучаем Perl
/fred\b/; # соответствует слову fred, но не Frederick
/\brno/; # соответствует словам тпое и mole, но не Elmo
/\bFred\b/; # соответствует слову Fred, но не Frederick или
alFred
/\Ь\+\Ь/; # соответствует "х+у", но не " + + " или " + "
/abc/bdef/; # никогда не дает совпадения(границы там быть не может)
Аналогичным образом \в требует, чтобы в указанной точке границы слова не
было. Например:
/\bFred\B/; # соответствует "Frederick", но не "Fred Flintstone"
Две другие фиксирующие точки требуют, чтобы определенная часть образца
стояла рядом с концом строки. Символ Л обозначает начало строки, если
стоит в месте, где сопоставление с началом строки имеет смысл. Например,
Ла соответствует символу а в том и только в том случае, если а - первый
символ в строке. аЛ соответствует двум символам, а и /ч, стоящим в любом
месте строки. Другими словами, символ Л утратил свое специальное
значение. Если вы хотите, чтобы он имел буквальный смысл и в начале
строки, поставьте перед ним обратную косую черту.
Символ $, как и Л, фиксирует образец, но не по началу, а по концу строки.
Другими словами, с$ соответствует символу с только в том случае, если он
стоит в конце строки*. Знак доллара в любом другом месте образца,
вероятно, будет интерпретироваться как представление скалярного значения,
поэтому для того, чтобы использовать его в строке буквально, перед ним
следует поставить обратную косую.
Поддерживаются и другие фиксирующие точки, включая \А, \z и упреждающие
фиксирующие точки, создаваемые с помощью комбинаций (?=...) и (?!...).
Они подробно описаны в главе 2 книги Programming Perl и на man-странице
perlre(l).
Приоритет
Что произойдет, если объединить а | b* ? Что будет отыскиваться - любое
количество символов а или b или один символ а и любое количество Ь?
Групповые и фиксированные образцы, как и операции, имеют приоритет.
Приоритет образцов (от высшего к низшему) приведен в таблице 7.2.
Предыдущая << 1 .. 41 42 43 44 45 46 < 47 > 48 49 50 51 52 53 .. 124 >> Следующая