Зворотні посилання
Поза символьним класом зворотний сліш з наступною цифрою більше нуля (і, можливо, наступними цифрами) інтерпретується як посилання на попередню захоплюючу підмаску, припускаючи, що відповідна кількість попередніх круглих дужок, що відкривають, присутня.
Однак, якщо наступне за зворотним слешем число менше 10, воно завжди інтерпретується як зворотне посилання, і призводить до помилки тільки в тому випадку, якщо немає відповідного числа дужок, що відкривають. Інакше кажучи, відкриваючі дужки нічого не винні передувати посиланню для чисел менше 10. «Випереджувальна зворотна посилання» може мати сенс, якщо використовується повторення і більш пізня підмаска бере участь у ранній итерации. Дивіться розділ escape-послідовності для отримання додаткових відомостей про обробку цифр, що йдуть за зворотним слішем.
Зворотне посилання зіставляється з частиною рядка, захопленого відповідною підмаскою, але не з підмаскою. Таким чином шаблон (sens|respons)e and \1ibility
відповідає "sense and sensibility", "response and responsibility", але не "sense and responsibility". Якщо зворотне посилання виявлено під час регістрозалежного пошуку, то при зіставленні зворотного посилання регістр також враховується. Наприклад, ((?i)rah)\s+\1
відповідає "rah rah" і "RAH RAH", але не "RAH rah", хоча сама підмаска зіставляється без урахування регістру.
На ту саму підмаску може бути кілька посилань. Якщо підмаска не брала участі в зіставленні, то зіставлення з посиланням на неї завжди зазнає невдачі. Наприклад, шаблон (a|(bc))\2
терпить невдачу, якщо знаходить відповідність до «a» раніше, ніж із «bc». Оскільки може бути до 99 зворотних посилань, всі цифри, що йдуть за зворотним слешем, розглядаються як частина потенційного зворотного посилання. Якщо за посиланням має йти цифра, необхідно використовувати обмежувач. Якщо вказано прапор PCRE_EXTENDED, обмежувачем може бути будь-який символ пробілу. Інакше можна використовувати порожній коментар.
Посилання на підмаску, всередині якої вона розташована, завжди зазнає невдачі, якщо це перше зіставлення поточної підмаски. Наприклад, шаблон (a\1) не відповідає жодному рядку. Але все ж такі посилання бувають корисні в підмасках, що повторюються. Наприклад, шаблон (a|b\1)+
збігається з будь-якою кількістю «a», «aba», «ababaa»... При кожній ітерації підмаски зворотне посилання відповідає частині рядка, яка була захоплена при попередній ітерації. Щоб така конструкція працювала, шаблон має бути побудований так, щоб при першій ітерації зіставлення зі зворотним посиланням не проводилося. Цього можна досягти, використовуючи альтернативи (як у попередньому прикладі), або квантифікатори з мінімумом, що дорівнює нулю.
Управляющая последовательность\g
може бути використана для абсолютних та відносних посилань на підмаски. Після цієї послідовності має бути вказано беззнакове чи негативне число, за бажанням укладене у фігурні дужки. Послідовності \1
\g1
и\g{1}
еквівалентні один одному. Використання цього шаблону з беззнаковим числом допоможе уникнути двозначності, властивої числам після зворотного слішу. Це також допомагає відрізнити зворотні посилання від символів у вісімковому форматі, а також спрощує запис числового літералу відразу після зворотного посилання, наприклад, \g{2}1
Використання негативних чисел з \g
корисно під час використання відносних посилань. Наприклад, (foo)(bar)\g{-1}
відповідає "foobarbar", а (foo)(bar)\g{-2}
відповідає "foobarfoo". Це також може бути корисним у довгих шаблонах, як альтернатива відстеження числа підмасок, на які можна посилатися в наступній частині шаблону.
Вказати зворотне посилання на іменовану підмаску можна за допомогою (?P=name)
\k<name>
\k'name'
\k{name}
\g{name}
\g<name>
или\g'name'