Умовні вирази

За допомогою умовних виразів відповідники формального виразу буде знайдено лише за виконання певних керованих умов.

За використання умовного виразу не буде виконуватися пошук певного символу, рушій скоріше вивчатиме оточення можливого відповідника формального виразу і визначатиме, чи той це вираз, який вам потрібен. Наприклад, за використання умови межа слова рушій пошуку не намагатиметься знайти символ, який не є символом слова, поряд зі знайденим словом, — рушій просто переконається, що цей символ не є символом слова. Це означає, що за використання умовного виразу, рядок буде знайдено і там, де пробільного символу немає, наприклад, наприкінці рядка.

У деяких умовних виразах можуть міститися шаблони, але за їх використання виконуватиметься лише перевірка на збіг рядка з вказаним шаблоном, — результат перевірки не буде включено до результатів пошуку.

У формальних виразах, описаних у цій документації, підтримуються такі умовні вирази:

^ (каретка: початок рядка)

Пошук на початку рядка.

За виразом ^Петре буде знайдено рядок «Петре» у рядку «Петре, агов!», але не у рядку «Агов, Петре!»

$ (кінець рядка)

Пошук наприкінці рядка.

За виразом ти\?$ буде знайдено останнє «ти» у рядку «Це зробив не ти?», але нічого не буде знайдено у рядку «Це ж не ти зробив?»

\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 відповідає одразу рядку """"текст"""" і рядку "текст".

Докладніший опис можна знайти у розділі Збереження знайденого тексту (зворотні посилання).

(?:ШАБЛОН) (Групування без захоплення)

Засіб обробки не захоплюватиме і не запам'ятовуватиме шаблон у дужках. Якщо ви не маєте наміру використовувати запам'ятовування груп, варто завжди користуватися саме цим варіантом запису груп.