Чтение онлайн

на главную

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

23.8.1. Символы и специальные символы

Регулярные выражения определяют шаблон, который можно использовать для сопоставления символов из строки. По умолчанию символ в шаблоне соответствует самому себе в строке. Например, регулярное выражение (шаблон) "abc" соответствует подстроке abc строки Is there an abc here?

Реальная мощь регулярных выражений заключается в специальных символах и сочетаниях символов, имеющих особый смысл в шаблоне.

Например,

выражение

x.y

соответствует любой строке, состоящей из трех символов, начинающейся с буквы

x
и заканчивающейся буквой
y
, например
xxy
,
x3y
и
xay
, но не
yxy
,
3xy
или
xy
.

Обратите внимание на то, что выражения

{...}
,
*
,
+
и
?
являются постфиксными операторами. Например, выражение \d+ означает “одна или несколько десятичных цифр”.

Если хотите использовать в шаблоне один из специальных символов, вы должны сделать его управляющим, поставив перед ним обратную косую черту; например, символ

+
в шаблоне является оператором “один или несколько”, а символ
\+
— это знак “плюс”.

23.8.2. Классы символов

Самые распространенные сочетания символов в сжатом виде представлены как специальные символы.

Символы в верхнем регистре означают “не вариант специального символа в нижнем регистре”. В частности, символ \W означает “не буква”, а не “буква в верхнем регистре”.

Элементы третьего столбца (например,

[[:digit:]]
) представляют собой альтернативные синтаксические конструкции, использующие более длинные имена.

Как и библиотеки

string
и
iostream
, библиотека
regex
может обрабатывать большие наборы символов, такие как Unicode. Как и в случае библиотек
string
и
iostream
, мы просто упоминаем об этом, чтобы при необходимости читатели могли самостоятельно найти информацию. Обсуждение манипуляций текстами в кодировке Unicode выходит за рамки рассмотрения нашей книги.

23.8.3. Повторения

Повторяющиеся шаблоны задаются постфиксными операторами.

Например, выражение

Ax*

соответствует символу A, за котором не следует ни одного символа или следует несколько символов x:

A

Ax

Axx

Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Если

мы требуем, чтобы символ
x
встречался хотя бы один раз, то следует использовать оператор
+
, а не
*
. Например, выражение

Ax+

соответствует символу A, за которым следует один или несколько символов x:

Ax

Axx

Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx

но не

A

В общем случае необязательный символ (ни одного или несколько) указывается с помощью знака вопроса. Например, выражение

\d–?\d

соответствует двум цифрам с необязательным дефисом между ними:

1–2

12

но не

1––2

Для задания конкретного количества вхождений или конкретного диапазона вхождений используются фигурные скобки. Например, выражение

\w{2}–\d{4,5}

соответствует только строкам, содержащим две буквы и дефис, за которым следуют четыре или пять цифр:

Ab–1234

XX–54321

22–54321

но не

Ab–123

?b–1234

Да, цифры задаются символами \w.

23.8.4. Группировка

Для того чтобы указать, что некое регулярное выражение является частичным шаблоном (sub-pattern), его следует заключить в круглые скобки. Рассмотрим пример.

(\d*:)

Данное выражение определяет частичный шаблон, не содержащий ни одной или содержащий несколько цифр, за которыми следует двоеточие. Группу можно использовать как часть более сложного шаблона. Рассмотрим пример.

(\d*:)?(\d+)

Данное выражение задает необязательную и, возможно, пустую последовательность цифр, за которыми следуют двоеточие и последовательность из одной или нескольких цифр. Этот лаконичный и точный способ выражения шаблонов изобрели обычные люди!

23.8.5. Варианты

Символ “или” (|) задает альтернативу. Рассмотрим пример.

Subject: (FW:|Re:)?(.*)

Поделиться:
Популярные книги

Обыкновенные ведьмы средней полосы 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Обыкновенные ведьмы средней полосы 2

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Сердце Дракона. Том 9

Клеванский Кирилл Сергеевич
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Сердце Дракона. Том 9

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Проект ’Погружение’. Том 1

Бредвик Алекс
1. Проект ’Погружение’
Фантастика:
фэнтези
рпг
постапокалипсис
5.00
рейтинг книги
Проект ’Погружение’. Том 1

Sos! Мой босс кровосос!

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Sos! Мой босс кровосос!

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд