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

ЖАНРЫ

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

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

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

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:)?(.*)

Это выражение распознает тему сообщения электронной почты с необязательными символами FW: или Re:, за которыми может не стоять ни одного символа или может стоять несколько символов. Рассмотрим пример.

Subject: FW: Hello, world!

Subject: Re:

Subject: Norwegian Blue

но не

SUBJECT: Re: Parrots

Subject FW: No subject!

Пустая альтернатива не допускается.

(|def)

// ошибка

Однако мы можем указать несколько альтернатив сразу.

(bs|Bs|bS|BS)

23.8.6. Наборы символов и диапазоны

Специальные символы представляют собой обозначение наиболее распространенных классов символов: цифр (\d); букв, цифр и знака подчеркивания (\w) и др. (см. раздел 23.7.2). Однако часто бывает полезно определить свой собственный специальный символ. Сделать это очень легко. Рассмотрим пример.

В спецификации класса символов дефис () используется для указания диапазона, например, [1–3] (1, 2 или 3) и [w–z] (w, x, y или z). Пожалуйста, будьте аккуратны при использовании таких диапазонов: не все языки содержат одинаковые буквы, и порядки их следования в алфавитах разных языков могут отличаться. Если вам необходим диапазон, не являющийся частичным диапазоном букв и цифр, принятых в английском языке, то обратитесь к документации.

Поделиться с друзьями: