Утверждения накладывают дополнительные условия на проверку регулярного выражения.
Утверждение не проверяет символы, скорее, оно анализирует совпавшую строку перед тем как подтвердить совпадение. Например, утверждение граница слова не пытается найти символ-разделитель слов, наоборот, оно проверяет, что в данной позиции нет словообразующего символа. Это означает, что утверждение будет верно даже в случае отсутствия символа-разделителя, например, в конце строки поиска.
Некоторые утверждения являются шаблонами, но они лишь проверяют, есть или нет в данном месте строки соответствие заданному шаблону, не включая его в конечный результат (то есть в «совпавший текст»).
Регулярные выражения, описанные в этом руководстве, поддерживают следующие утверждения:
^(начало строки)Проверка на начало строки.
Выражение
^Пётрсовпадёт с «Пётр» в строке «Пётр, здравствуйте!», но не в строке «Здравствуйте, Пётр!».$(конец строки)Проверка на конец строки поиска.
Выражение
ты\?$совпадёт с последним «ты» в строке «— Ты не сделаешь этого! — А ты?», но не совпадёт ни с какой частью строки «Ты не сделал этого, так?».\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».(ШАБЛОН)(захватываемая группа)Вложенный шаблон в круглых скобках будет захвачен и запомнен, что позволяет использовать его в обратных ссылках. Например, выражение
("+)[^"]*\1совпадает с""""текст""""и"текст".Подробные сведения доступны в разделе Захват совпавшего текста (обратные ссылки).
(?:ШАБЛОН)(группа без захвата)Вложенный шаблон в круглых скобках не будет захвачен и запомнен. Если захват текста не требуется, рекомендуется всегда использовать группы без захвата.