Предисловие
Почему я написал эту книгу
Почему было написано второе издание книги
Для кого написана эта книга
Как читать эту книгу
Структура книги
Вводная часть
Подробное описание
Конкретные программы
Условные обозначения
Задачи
Личные комментарии и благодарности
От издательства
Глава 1. Знакомство с регулярными выражениями
Решение реальных задач
Регулярные выражения как язык
Аналогия с файловыми шаблонами
Аналогия с языками
Цель этой книги
Регулярные выражения как особый склад ума
Для читателей, работавших с регулярными выражениями
Поиск в текстовых файлах: egrep
Метасимволы egrep
Начало и конец строки
Символьные классы
Один произвольный символ
Выбор
Игнорирование различий в регистре символов
Границы слов
В двух словах
Другие квантификаторы: повторение
Круглые скобки и обратные ссылки
Экранирование
Новые горизонты
Языковая диверсификация
Смысл регулярного выражения
Дополнительные примеры
Терминология регулярных выражений
Пути к совершенствованию
Итоги
Личные заметки
Глава 2. Дополнительные примеры
О примерах
Краткий курс Perl
Поиск по регулярному выражению
Переходим к реальным примерам
Побочные эффекты успешных совпадений
Взаимодействие регулярных выражений с логикой программы
Лирическое отступление
Модификация текста с использованием регулярных выражений
Пример: письмо на стандартном бланке
Пример: обработка биржевых котировок
Автоматизация редактирования
Маленькая почтовая утилита
Разделение разрядов числа запятыми
Преобразование текста в HTML
Задача с повторяющимися словами
Глава 3. Регулярные выражения: диалекты и возможности
Регулярные выражения и машины
Для чего написана эта глава
История регулярных выражений
На первый взгляд
Основные операции с регулярными выражениями
Интегрированный интерфейс
Процедурный и объектно-ориентированный интерфейс
Поиск с заменой
Поиск и замена в других языках
Итоги
Строки, кодировки и режимы
Строки как регулярные выражения
Проблемы кодировки символов
Режимы обработки регулярных выражений и поиска совпадений
Стандартные метасимволы и возможности
Представления символов
Сокращенные обозначения символов
Символьные классы и их аналоги
Сокращенные обозначения классов: \w, \d, \s, \W, \D, \S
Якорные метасимволы и другие проверки с нулевой длиной совпадения
Комментарии и модификаторы режимов
Группировка, сохранение, условные и управляющие конструкции
Путеводитель по серьезным главам
Глава 4. Механика обработки регулярных выражений
Запустить двигатели!
Два вида двигателей
Новые стандарты
Влияние стандартов
Типы механизмов регулярных выражений
С позиций избыточности
Определение типа механизма
Основы поиска совпадений
О примерах
Правило 1. Более раннее совпадение выигрывает
Смещение текущей позиции поиска
Компоненты и части двигателя
Отсутствие обратных ссылок, сохраняющих круглых скобок и минимальных квантификаторов
Правило 2. Квантификаторы работают максимально
Механизмы регулярных выражений
НКА: механизм, управляемый регулярным выражением
ДКА: механизм, управляемый текстом
Сравнение двух механизмов
Возврат
Крошечная аналогия
Два важных замечания
Сохраненные состояния
Возврат и максимализм
Подробнее о максимализме
Проблемы максимализма
Многосимвольные "кавычки"
Минимальные квантификаторы
Максимальные и минимальные конструкции всегда выбирают совпадение
О сущности максимализма, минимализма и возврата
Захватывающие квантификаторы и атомарная группировка
Захватывающие квантификаторы ?+, *+, ++ и {макс,мин}+
Возврат при позиционной проверке
Максимальна ли конструкция выбора?
Использование упорядоченного выбора
НКА, ДКА и POSIX
Скорость и эффективность
Сравнение ДКА и НКА
Итоги
Глава 5. Практические приемы построения регулярных выражений
Балансировка регулярных выражений
Несколько коротких примеров
Работа с именами файлов
Поиск парных скобок
Исключение нежелательных совпадений
Поиск текста в ограничителях
Данные и предположения
Удаление пропусков в начале и конце строки
Работа с HTML
Поиск тегов HTML
Поиск ссылок HTML
Анализ HTTP URL
Проверка имени хоста
Поиск URL на практике
Нетривиальные примеры
Синхронизация
Разбор данных, разделенных запятыми
Глава 6. Построение эффективных регулярных выражений
Убедительный пример
Простое изменение - начинаем с более вероятного случая
Эффективность и правильность
Локализация максимального поиска
Возвращение к реальности
Возврат с глобальной точки зрения
POSIX НКА - работа продолжается
Работа механизма при отсутствии совпадения
Уточнение
Конструкция выбора может дорого обойтись
Хронометраж
Зависимость результатов хронометража от данных
Хронометраж в языке Java
Хронометраж в языке VB.NET
Хронометраж в языке Python
Хронометраж в языке Ruby
Хронометраж в языке Tcl
Стандартные оптимизации
Ничто не дается бесплатно
Универсальных истин не бывает
Механика применения регулярных выражений
Предварительные оптимизации
Оптимизации при смещении текущей позиции
Оптимизации на уровне регулярных выражений
Приемы построения быстрых выражений
Приемы, основанные на здравом смысле
Выделение литерального текста
Выделение якорей
Выбор между минимальными и максимальными квантификаторами
Разделение регулярных выражений
Имитация исключения по первому символу
Использование атомарной группировки и захватывающих квантификаторов
Руководство процессом поиска
Раскрутка цикла
Метод 1. Построение регулярного выражения по результатам тестов
Общий шаблон "раскрутки цикла"
Метод 2. Структурный анализ
Метод 3. Имена хостов Интернета
Замечания
Применение атомарной группировки и захватывающих квантификаторов
Примеры раскрутки цикла
Раскрутка комментариев C
Прямолинейный подход
Раскрутка выражения для поиска комментариев C
Исключение случайных совпадений
Управление поиском совпадения
Управление поиском = скорость
Свертка
Думайте!
Глава 7. Perl
В этой главе
Регулярные выражения как компонент языка
Самая сильная сторона Perl
Самая слабая сторона Perl
Диалект регулярных выражений Perl
Регулярные выражения - операнды и литералы
Порядок обработки литералов регулярных выражений
Модификаторы регулярных выражений
Perl\'измы из области регулярных выражений
Контекст выражения
Динамическая видимость и последствия совпадения регулярных выражений
Специальные переменные, изменяемые при поиске
Оператор qr/…/ и объекты регулярных выражений
Построение и использование объектов регулярных выражений
Просмотр содержимого объектов регулярных выражений
Объекты регулярных выражений и повышение эффективности
Оператор поиска
Первый операнд (регулярное выражение)
Второй операнд (целевой текст)
Варианты использования оператора поиска
Интерактивный поиск - скалярный контекст с модификатором /g
Внешние связи оператора поиска
Оператор подстановки
Операнд-замена
Модификатор /e
Контекст и возвращаемое значение
Оператор разбиения
Простейшее разбиение
Нетривиальное разбиение
Возвращение пустых элементов
Специальные значения первого операнда split
Сохраняющие круглые скобки в первом операнде split
Специфические возможности Perl
Применение динамических регулярных выражений для поиска вложенных конструкций
Встроенный код
Ключевое слово local во встроенном коде
Встроенный код и переменные my
Поиск вложенных конструкций
Перегрузка литералов регулярных выражений
Ограничения перегрузки литералов регулярных выражений
Имитация именованного сохранения
Проблемы эффективности в Perl
У каждой задачи есть несколько решений
Компиляция регулярных выражений, модификатор /o, qr/…/ и эффективность
Предварительное копирование
Функция study
Хронометраж
Отладочная информация регулярных выражений
Последний комментарий
Глава 8. Java
Оценка пакетов регулярных выражений
Технические критерии Социальные и политические критерии
Объектные модели
Несколько абстрактных объектных моделей
Возрастание сложности
Пакеты, пакеты, пакеты…
Почему существует столько диалектов "Perl 5"?
Ложь, грязная ложь и хронометраж
Пакет регулярных выражений от Sun
Диалект регулярных выражений
Использование пакета java.util.regex
Метод Pattern.compile( )
Объект Matcher
Другие методы Pattern
Краткое знакомство с Jakarta-ORO
Класс Perl5Util
Краткий справочник по Perl5Util
Основные классы ORO
Глава 9. .NET
Диалект регулярных выражений .NET
Использование регулярных выражений в .NET
Основные принципы работы с регулярными выражениями
Общие сведения о пакете
Краткая сводка основных объектов
Основные объекты
Создание объектов Regex
Использование объектов Regex
Использование объектов Match
Использование объектов Group
Статические вспомогательные функции
Дополнительные функции
Нетривиальные возможности .NET
Сборки регулярных выражений
Поиск вложенных конструкций
Объект Capture
Алфавитный указатель

закрыть