Оглавление
 Предисловие
 Глава 1. Знакомство с регулярными выражениями
 Решение реальных задач
 Регулярные выражения как язык
 Аналогия с файловыми шаблонами
 Аналогия с языками
 Регулярные выражения как особый склад ума
 Для читателей, имеющих опыт работы с регулярными выражениями
 Поиск в текстовых файлах: egrep
 Метасимволы egrep
 Начало и конец строки
 Символьные классы
 Один произвольный символ
 Выбор
 Игнорирование различий в регистре символов
 Границы слов
 В двух словах
 Необязательные элементы
 Другие квантификаторы: повторение
 Круглые скобки и обратные ссылки
 Экранирование
 Новые горизонты
 Языковая диверсификация
 Смысл регулярного выражения
 Дополнительные примеры
 Терминология регулярных выражений
 Пути к совершенствованию
 Итоги
 Личные заметки9
 Глава 2. Дополнительные примеры
 О примерах
 Краткий курс Perl
 Поиск по регулярному выражению
 Переходим к реальным примерам
 Побочные эффекты успешных совпадений
 Взаимодействие регулярных выражений с логикой программы
 Лирическое отступление
 Модификация текста с использованием регулярных выражений
 Пример: письмо на стандартном бланке
 Пример: обработка биржевых котировок
 Автоматизация редактирования
 Маленькая почтовая утилита
 Разделение разрядов числа запятыми
 Преобразование текста в HTML
 Задача с повторяющимися словами
 Глава 3. Регулярные выражения: возможности и диалекты
 История регулярных выражений
 Происхождение регулярных выражений
 На первый взгляд
 Основные операции с регулярными выражениями
 Интегрированный интерфейс
 Процедурный и объектно-ориентированный интерфейс
 Поиск с заменой
 Поиск и замена в других языках
 Итоги
 Строки, кодировки и режимы
 Строки как регулярные выражения
 Проблемы кодировки символов
 Юникод
 Режимы обработки регулярных выражений и поиска совпадений
 Стандартные метасимволы и возможности
 Представления символов
 Символьные классы и их аналоги
 Якорные метасимволы и другие проверки с нулевой длиной совпадения
 Комментарии и модификаторы режимов
 Группировка, сохранение, условные и управляющие конструкции
 Путеводитель по серьезным главам
 Глава 4. Механика обработки регулярных выражений
 Запустить двигатели!
 Два вида двигателей
 Новые стандарты
 Типы механизмов регулярных выражений
 С позиций избыточности
 Определение типа механизма
 Основы поиска совпадений
 О примерах
 Правило 1: более раннее совпадение выигрывает
 Компоненты и части двигателя
 Правило 2: квантификаторы работают максимально
 Механизмы регулярных выражений
 НКА: механизм, управляемый регулярным выражением
 ДКА: механизм, управляемый текстом
 Сравнение двух механизмов
 Возврат
 Крошечная аналогия
 Два важных замечания
 Сохраненные состояния
 Возврат и максимализм
 Подробнее о максимализме и о возврате
 Проблемы максимализма
 Многосимвольные "кавычки"
 Минимальные квантификаторы
 Максимальные и минимальные конструкции всегда выбирают совпадение
 О сущности максимализма, минимализма и возврата
 Захватывающие квантификаторы и атомарная группировка
 Захватывающие квантификаторы ?+, *+, ++ и {max,min}+	
 Возврат при позиционной проверке
 Максимальна ли конструкция выбора?
 Использование упорядоченного выбора
 НКА, ДКА и POSIX
 "Самое длинное совпадение, ближнее к левому краю"
 POSIX и правило "самого длинного совпадения, ближнего к левому краю"
 Скорость и эффективность
 Сравнение ДКА и НКА
 Итоги
 Глава 5. Практические приемы построения регулярных выражений
 Балансировка регулярных выражений
 Несколько коротких примеров
 Снова о строках продолжения
 Поиск IP-адреса
 Работа с именами файлов
 Поиск парных скобок
 Исключение нежелательных совпадений
 Поиск текста в ограничителях
 Данные и предположения
 Удаление пропусков в начале и конце строки
 Работа с HTML
 Поиск тегов HTML
 Поиск ссылок HTML
 Анализ HTTP URL
 Проверка имени хоста
 Поиск URL на практике
 Нетривиальные примеры
 Синхронизация
 Разбор данных, разделенных запятыми
 Глава 6. Построение эффективных регулярных выражений
 Убедительный пример
 Простое изменение - начинаем с более вероятного случая
 Эффективность и правильность
 Следующий шаг - локализация максимального поиска
 Возвращение к реальности
 Возврат с глобальной точки зрения
 POSIX НКА - работа продолжается
 Работа механизма при отсутствии совпадения
 Уточнение
 Конструкция выбора может дорого обойтись
 Хронометраж
 Зависимость результатов хронометража от данных
 Хронометраж в языке PHP
 Хронометраж в языке Java
 Хронометраж в языке VB.NET
 Хронометраж в языке Ruby
 Хронометраж в языке Python
 Хронометраж в языке Tcl
 Стандартные оптимизации
 Ничто не дается бесплатно
 Универсальных истин не бывает
 Механика применения регулярных выражений
 Предварительные оптимизации
 Оптимизации при смещении текущей позиции
 Оптимизации на уровне регулярных выражений
 Приемы построения быстрых выражений
 Приемы, основанные на здравом смысле
 Выделение литерального текста
 Выделение якорей
 Выбор между минимальными и максимальными квантификаторами
 Разделение регулярных выражений
 Имитация исключения по первому символу
 Использование атомарной группировки и захватывающих квантификаторов
 Руководство процессом поиска
 Раскрутка цикла
 Метод 1: построение регулярного выражения по результатам тестов
 Общий шаблон "раскрутки цикла"
 Метод 2: структурный анализ
 Метод 3: имена хостов Интернета
 Замечания
 Применение атомарной группировки и захватывающих квантификаторов
 Примеры раскрутки цикла
 Раскрутка комментариев С
 Исключение случайных совпадений
 Управление поиском совпадения
 Управление поиском = скорость
 Свертка
 Вывод: думайте!
 Глава 7. Perl
 Регулярные выражения как компонент языка
 Самая сильная сторона Perl
 Самая слабая сторона Perl
 Диалект регулярных выражений Perl
 Регулярные выражения - операнды и литералы
 Порядок обработки литералов регулярных выражений
 Модификаторы регулярных выражений
 Реrl\'измы из области регулярных выражений
 Контекст выражения
 Динамическая видимость и последствия совпадения регулярных выражений
 Специальные переменные, изменяемые при поиске
 Оператор qr/…/ и объекты регулярных выражений
 Построение и использование объектов регулярных выражений
 Просмотр содержимого объектов регулярных выражений
 Объекты регулярных выражений и повышение эффективности
 Оператор поиска
 Операнд регулярное выражение
 Операнд целевой текст
 Варианты использования оператора поиска
 Интерактивный поиск - скалярный контекст с модификатором /g
 Внешние связи оператора поиска
 Оператор подстановки
 Операнд-замена
 Модификатор /e
 Контекст и возвращаемое значение
 Оператор разбиения
 Простейшее разбиение
 Возвращение пустых элементов
 Специальные значения первого операнда split
 Сохраняющие круглые скобки в первом операнде split
 Специфические возможности Perl
 Применение динамических регулярных выражений для поиска вложенных конструкций
 Встроенный код
 Ключевое слово local во встроенном коде
 Встроенный код и переменные my
 Поиск вложенных конструкций
 Перегрузка литералов регулярных выражений
 Ограничения перегрузки литералов регулярных выражений
 Имитация именованного сохранения
 Проблемы эффективности в Perl
 У каждой задачи есть несколько решений
 Компиляция регулярных выражений, модификатор /о, qr/…/ и эффективность
 Предварительное копирование
 Функция study
 Хронометраж
 Отладочная информация регулярных выражений
 Последний комментарий
 Глава 8. Java
 Диалект регулярных выражений
 Поддержка конструкций \p{…} и \P{…} в Java
 Завершители строк Юникода
 Использование пакета java.util.regex
 Метод Pattern.compile()
 Метод Pattern.matcher()
 Объект Matcher
 Применение регулярного выражения
 Получение информации о результатах
 Простой поиск с заменой
 Расширенный поиск с заменой
 Поиск с заменой по месту
 Область в объекте Matcher
 Объединение методов в конвейер
 Методы для построения сканеров
 Другие методы Matcher
 Другие методы Pattern
 Метод split класса Pattern с одним аргументом
 Метод split класса Pattern с двумя аргументами
 Дополнительные примеры
 Добавление атрибутов WIDTH и HEIGHT в теги 
 Проверка корректности HTML-кода с использованием нескольких регулярных выражений на один объект Matcher
 Разбор данных CSV
 Различия между версиями Java
 Различия между 1.4.2 и 1.5.0
 Различия между 1.5.0 и 1.6.0
 Глава 9. .NET
 Диалект регулярных выражений .NET
 Замечания по поводу диалекта .NET
 Использование регулярных выражений в .NET
 Основные принципы работы с регулярными выражениями
 Общие сведения о пакете
 Краткая сводка основных объектов
 Основные объекты
 Создание объектов Regex
 Использование объектов Regex
 Использование объектов Match
 Использование объектов Group
 Статические вспомогательные функции
 Кэширование регулярных выражений
 Дополнительные функции
 Нетривиальные возможности .NET
 Сборки регулярных выражений
 Поиск вложенных конструкций
 Объект Capture
 Глава 10. PHP
 Диалект регулярных выражений PHP
 Функциональный интерфейс механизма preg
 Аргумент "шаблон"
 Функции preg
 preg_match_all
 preg_replace
 preg_replace_callback
 preg_split
 preg_grep
 preg_quote
 "Недостающие" функции preg
 preg_regex_to_pattern
 Проверка синтаксиса неизвестного шаблона
 Проверка синтаксиса неизвестного регулярного выражения
 Рекурсивные регулярные выражения
 Поиск совпадений с вложенными круглыми скобками
 Никаких возвратов в рекурсии
 Совпадение с парой вложенных скобок
 Вопросы эффективности в PHP
 Модификатор шаблона S: "Study"
 Расширенные примеры
 Разбор данных в формате CVS в PHP
 Проверка тегированных данных на корректность вложенных конструкций
 Алфавитный указатель