Утверждения

Утверждения накладывают дополнительные условия на проверку регулярного выражения.

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

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

Регулярные выражения, описанные в этом руководстве, поддерживают следующие утверждения:

^ (начало строки)

Проверка на начало строки.

Выражение ^Пётр совпадёт с «Пётр» в строке «Пётр, здравствуйте!», но не в строке «Здравствуйте, Пётр!».

$ (конец строки)

Проверка на конец строки поиска.

Выражение ты\?$ совпадёт с последним «ты» в строке «— Ты не сделаешь этого! — А ты?», но не совпадёт ни с какой частью строки «Ты не сделал этого, так?».

\b (граница слова)

Проверяет, есть ли в данном месте с одной стороны словообразующий символ, а с другой — отличный от словообразующего (необязательно разделитель!).

Это утверждение используется для поиска границ слов; например, можно использовать два таких утверждения, чтобы найти целое слово. Выражение \bиз\b совпадёт с отдельным словом «из» во фразе «Он выпал из этого окна, хорошо хоть, что тут низко», но не совпадёт с «из» в слове «низко».

\B (нет границы слова)

Действие этого утверждения обратно утверждению «\b».

Это значит, что данное утверждение будет совпадать, например, в середине слова: выражение \Bце\B совпадёт с «це» в строке «сцена», но не в «целое».

(?=ШАБЛОН) (подтверждающий просмотр вперёд)

Утверждения просмотра вперёд действуют аналогично обычным шаблонам, с той лишь разницей, что текст, совпавший (или не совпавший, в зависимости от типа просмотра) с утверждением, не будет включен в результирующее совпадение. Подтверждающий просмотр вперёд проверяет текст на предмет совпадения с ШАБЛОНОМ утверждения.

Выражение программ(?=\w) совпадёт с «программ» в слове «программист», но не во фразе «Он написал много хороших программ!».

(?!ШАБЛОН) (отрицающий просмотр вперёд)

Отрицающий просмотр вперёд проверяет текст на предмет несовпадения с ШАБЛОНОМ.

Выражение const \w+\b(?!\s*&) совпадёт с «const char» в строке «const char* foo», но не совпадёт с «const QString» в «const QString& bar», поскольку «&» совпадает с шаблоном отрицающего просмотра вперёд.

(?<=ШАБЛОН) (подтверждающий просмотр назад)

Утверждения просмотра назад действуют аналогично утверждениям просмотра вперёд, разница заключается только в направлении просмотра. Утверждение просмотра назад проверяет часть строки, которая предшествует возможному совпадению. Подтверждающее утверждение просмотра назад будет совпадать со строкой только в том случае, если ей предшествует ШАБЛОН утверждения, но найденное совпадение не будет включено в результат.

Выражение (?<=цвет)ок совпадёт с «ок», если этим символам предшествуют символы «цвет» (в слове «цветок», но не в слове «росток» или в отдельном слове «ок»).

(?<!ШАБЛОН) (отрицающий просмотр назад)

Отрицающий просмотр назад проверяет текст на предмет несовпадения с ШАБЛОНОМ.

Выражение (?<![\w\.])[0-9]+ совпадёт с «123» в строках «=123» и «-123», но не совпадёт с «123» в строках «.123» и «слово123».

(ШАБЛОН) (захватываемая группа)

Вложенный шаблон в круглых скобках будет захвачен и запомнен, что позволяет использовать его в обратных ссылках. Например, выражение (&quot;+)[^&quot;]*\1 совпадает с """"текст"""" и "текст".

Подробные сведения доступны в разделе Захват совпавшего текста (обратные ссылки).

(?:ШАБЛОН) (группа без захвата)

Вложенный шаблон в круглых скобках не будет захвачен и запомнен. Если захват текста не требуется, рекомендуется всегда использовать группы без захвата.