Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
Последняя строка по смыслу отличается от остальных: в ней содержатся суммы. Мы распознаем ее по метке (“Alle klasser”). Мы решили, что после последнего символа не должны стоять символы, не являющиеся разделителями (для распознавания этого факта используется функция
Для того чтобы извлечь числа из полей данных, мы использовали функцию
23.10. Ссылки
Регулярные выражения — популярный и полезный инструмент, доступный во многих языках программирования и во многих форматах. Они поддерживаются элегантной теорией, основанной на формальных языках, и эффективной технологией реализации, основанной на конечных автоматах. Описание регулярных выражений, их теории, реализации и использования конечных автоматов выходит за рамки рассмотрения настоящей книги. Однако поскольку эта тема в компьютерных науках является довольно стандартной, а регулярные выражения настолько популярны, найти больше информации при необходимости не составляет труда.
Перечислим некоторые из этих источников.
Aho, Alfred V., Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools, Second Edition (обычно называемая “The Dragon Book”). Addison-Wesley, 2007. ISBN 0321547985.
Austern, Matt, ed. “Draft Technical Report on C++ Library Extensions”. ISO/IEC DTR 19768, 2005. www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n2336.pdf.
Boost.org. Хранилище библиотек, согласованных со стандартной библиотекой языка С++. www.boost.org.
Cox, Russ. “Regular Expression Matching Can Be Simple and Fast (but Is Slow in Java, Perl, PHP, Python, Ruby, ...)”. http://swtch.com/~rsc/regexp/regexp1.html.
Maddoc, J. boost::regex documentation. www.boost.org/libs/regex/doc/index.html.
Schwartz, Randal L., Tom Phoenix, and Brian D. Foy. Learning Perl, Fourth Edition.
O’Reilly, 2005. ISBN 0596101058.
Задание
1. Выясните, является ли библиотека
2. Запустите небольшую программу из раздела 23.7; для этого может понадобиться инсталлировать библиотеку
3.
Используйте программу из задания 2 для проверки шаблонов из раздела 23.7.Контрольные вопросы
1. Где мы находим “text”?
2. Какие возможности стандартной библиотеки чаще всего используются для анализа текста?
3. Куда вставляет элемент функция
4. Что такое Unicode?
5. Как конвертировать тип в класс
6. В чем заключается разница между инструкцией
7. Перечислите стандартные потоки.
8. Что собой представляет ключ ассоциативного массива
9. Как перемещаться по элементам контейнера класса
10. В чем заключается разница между классами
11. Какие операции требуются для однонаправленного итератора?
12. В чем заключается разница между пустым и отсутствующим полем? Приведите два примера.
13. Зачем нужен символ управляющей последовательности при формировании регулярных выражений?
14. Как превратить регулярное выражение в переменную типа
15. Какие строки соответствуют шаблону
16. Как (в программе) выяснить, является ли строка корректным регулярным выражением?
17. Что делает функция
18. Что делает функция
19. Как представить символ точки (
20. Как выразить понятие “не меньше трех” в регулярном выражении?
21. Относится ли символ 7 к группе
22. Какое обозначение используется для символов в верхнем регистре?
23. Как задать свой собственный набор символов?
24. Как извлечь значение из целочисленного поля?
25. Как представить число с плавающей точкой с помощью регулярного выражения?
26. Как извлечь число с плавающей точкой из строки, соответствующей шаблону?
27. Что такое частичное совпадение (sub-match)? Как его обнаружить?
Термины
Упражнения
1. Запустите программу, работающую с файлом сообщений электронной почты; протестируйте ее, используя свой собственный, более длинный файл. Убедитесь, что в этом файле есть сообщения, вызывающие сообщения об ошибках, например, сообщения с двумя адресными строками, несколько сообщений с одинаковыми адресами и/или темами и пустые сообщения. Кроме того, протестируйте программу на примере, который вообще не является сообщением и не соответствует программной спецификации, например, на файле, не содержащем строк – ---.