정규식(PCRE) PCRE Patterns Back references

문자 클래스 외부에서 백슬래시 다음에 0보다 큰 숫자(및 추가 숫자)가 오는 것은 이전에 캡처하는 왼쪽 괄호가 많이 있었다면 패턴에서 이전(즉, 왼쪽으로) 캡처하는 하위 패턴에 대한 역참조입니다.

그러나 백슬래시 뒤의 10진수가 10보다 작으면 항상 역참조로 간주되어 전체 패턴에서 캡처하는 왼쪽 괄호가 많지 않은 경우에만 오류가 발생합니다. 다시 말해, 참조되는 괄호는 10보다 작은 숫자의 경우 참조 왼쪽에 있을 필요가 없습니다. "순방향 역 참조"는 반복이 포함되고 오른쪽의 하위 패턴이 이전 반복에 참여했을 때 의미가 있을 수 있습니다. . 백슬래시 뒤에 오는 숫자 처리에 대한 자세한 내용은 escape sequences 섹션을 참조하세요.

역 참조는 하위 패턴 자체와 일치하는 것이 아니라 현재 주제 문자열에서 캡처하는 하위 패턴과 실제로 일치하는 항목과 일치합니다. 따라서 패턴 (sens|respons)e and \1ibility는 "sense and sensibility" 및 "response and 책임"과 일치하지만 "sense and 책임"은 일치하지 않습니다. 대소문자 구분(대소문자 구분) 일치가 역참조 시 적용되는 경우 대소문자가 관련됩니다. 예를 들어, ((?i)rah)\s+\1은 "rah rah" 및 "RAH RAH"와 일치하지만 원래 캡처 하위 패턴이 대소문자를 구분하지 않고(대소문자 없이) 일치하더라도 "RAH rah"는 일치하지 않습니다.

동일한 하위 패턴에 대해 둘 이상의 역참조가 있을 수 있습니다. 하위 패턴이 특정 일치에서 실제로 사용되지 않은 경우 해당 하위 패턴에 대한 역 참조는 항상 실패합니다. 예를 들어 (a|(bc))\2 패턴은 "bc"가 아닌 "a"와 일치하기 시작하면 항상 실패합니다. 최대 99개의 역참조가 있을 수 있으므로 역슬래시 다음의 모든 숫자는 잠재적 역참조 번호의 일부로 사용됩니다. 패턴이 숫자 문자로 계속되면 역참조를 종료하기 위해 일부 구분 기호를 사용해야 합니다. PCRE_EXTENDED 옵션이 설정되면 공백이 될 수 있습니다. 그렇지 않으면 빈 주석을 사용할 수 있습니다.

참조하는 괄호 내부에서 발생하는 역참조는 하위 패턴이 처음 사용될 때 실패하므로 예를 들어 (a\1)은 일치하지 않습니다. 그러나 이러한 참조는 반복되는 하위 패턴 내에서 유용할 수 있습니다. 예를 들어 (a|b\1)+ 패턴은 "a" 및 "aba", "ababba" 등과 일치합니다. 하위 패턴의 각 반복에서 역참조는 이전에 해당하는 문자열과 일치합니다. 반복. 이것이 작동하려면 패턴이 첫 번째 반복이 역 참조와 일치할 필요가 없도록 해야 합니다. 이것은 위의 예에서와 같이 교대를 사용하거나 최소값이 0인 수량자를 사용하여 수행할 수 있습니다.

\g 이스케이프 시퀀스는 하위 패턴의 절대 및 상대 참조에 사용할 수 있습니다. 이 이스케이프 시퀀스 뒤에는 부호 없는 숫자나 음수가 와야 하며 선택적으로 중괄호로 묶입니다. \1, \g1\g{1} 시퀀스는 서로 동의어입니다. 이 패턴을 부호 없는 숫자와 함께 사용하면 백슬래시 다음에 숫자를 사용할 때 고유한 모호성을 제거하는 데 도움이 될 수 있습니다. 이 시퀀스는 역참조를 8진수 문자와 구별하는 데 도움이 되며 역참조 뒤에 리터럴 숫자가 오는 것을 더 쉽게 만듭니다. \g{2}1.

음수와 함께 \g 시퀀스를 사용하면 상대 참조를 나타냅니다. 예를 들어, (foo)(bar)\g{-1}는 "foobarbar" 시퀀스와 일치하고 (foo)(bar)\g{-2}는 "foobarfoo"와 일치합니다. 이것은 특정 이전 하위 패턴을 참조하기 위해 하위 패턴 수를 추적하는 대신 긴 패턴에서 유용할 수 있습니다.

Back references to the named subpatterns can be achieved by (?P=name), \k<name>, \k'name', \k{name}, \g{name}, \g<name> 또는 \g'name'.