다음을 통해 공유


역참조

업데이트: 2007년 11월

역참조는 정규식에서 찾은 그룹에 의해 캡처된 부분 문자열을 식별합니다. 각 역참조는 번호나 이름으로 식별되며 "\number" 또는 "\k<name>" 표기법으로 참조됩니다. 예를 들어, 입력 문자열에 임의의 부분 문자열이 여러 개 있으면 캡처 그룹을 사용하여 첫 번째로 나타나는 부분 문자열을 찾은 다음 역참조를 사용하여 이후에 나타나는 부분 문자열을 찾을 수 있습니다. 자세한 내용은 역참조 구문그룹화 구문을 참조하십시오.

역참조는 반복되는 문자 그룹을 찾는 편리한 방법을 제공하며, 동일한 문자열을 다시 찾기 위한 간단한 명령으로 생각할 수 있습니다. 예를 들어, "tall"이라는 단어에서 두 개의 L과 같이 반복되는 인접 문자를 찾으려면 단일 단어 문자를 찾는 메타문자 \w를 사용하는 (?<char>\w)\k<char> 정규식을 사용합니다. 그룹화 구문 (?<char> )는 메타문자를 포함하여 정규식 엔진이 부분식 일치를 "기억"하여(이 예제의 경우에서는 단일 문자) "char"라는 이름으로 저장하게 합니다. 역참조 구문 \k<char>를 통해 정규식 엔진은 이전에 찾아서 "char"에 저장한 문자와 현재 문자를 비교합니다. 이 정규식은 단일 문자가 앞 문자와 같으면 일치 항목을 성공적으로 찾습니다.

반복하는 단어를 찾으려면 단순히 단일 문자를 검색하는 대신 앞에 공백이 있는 문자 그룹을 검색하도록 그룹화 부분식을 수정하면 됩니다. 문자 그룹과 일치하는 \w+ 부분식으로 메타문자 \w를 대체하고, 메타문자 \s를 문자 그룹 앞의 공백을 찾을 수 있습니다. 이렇게 변경한 정규식 (?<char>\s\w+)\k<char>는 " the the" 와 같이 전체 단어를 반복하는 항목을 찾으며, " the theory"라는 구에서처럼 지정된 문자열의 다른 반복 항목도 함께 찾습니다.

두 번째 일치 항목이 단어 경계에 있는지 확인하려면 반복 일치 항목 뒤에 메타문자 \b를 추가합니다. 결과 정규식 (?<char>\s\w+)\k<char>\b는 전체 단어를 반복하는 항목 중에서도 앞에 공백이 있는 단어만을 찾습니다.

역참조 구문 분석

식 \1 ~ \9는 8진법 코드가 아니라 항상 역참조를 가리킵니다. 두 자릿 수 이상으로 된 식(예: \10 식)은 해당 숫자에 해당하는 역참조가 있는 경우에는 역참조로 간주되고 그렇지 않은 경우에는, 시작 숫자가 8 또는 9이어서 각각 리터럴 "8"과 "9"로 간주되는 경우를 제외하고는 8진법 코드로 해석됩니다.정의되지 않은 그룹 숫자에 대한 역참조가 정규식에 포함되어 있으면 구문 분석 오류로 간주됩니다. 모호성이 문제가 되는 경우에는 명백하고 8진법 문자 코드와 혼동되지 않는 \k<n> 표기법을 사용할 수 있습니다. 마찬가지로 \xdd와 같은 16진법 코드도 명백하므로 역참조와 혼동되지 않습니다.

ECMAScript 옵션 플래그를 사용하면 역참조 동작이 약간 달라집니다. 자세한 내용은 ECMAScript 및 정식 일치 동작을 참조하십시오.

역참조 검색

역참조는 가장 최근의 그룹 정의(왼쪽으로 오른쪽으로 검색하는 경우 가장 왼쪽에 있는 정의)를 참조합니다. 특히 그룹에서 여러 개의 캡처를 만드는 경우 역참조는 가장 최근의 캡처를 참조합니다. 예를 들어, 캡처링 패턴이 (a)(ab)(abb)인 경우 (?<1>a)(?<1>\1b)*는 aababb를 검색합니다. 반복 수량자는 그룹 정의를 제거하지 않습니다.

그룹에서 부분 문자열을 캡처링하지 않은 경우 해당 그룹에 대한 역참조는 정의되지 않으며 검색되지 않습니다. 예를 들어, \1() 식은 아무 것도 검색하지 않지만 ()\1 식은 빈 문자열을 검색합니다.

참고 항목

기타 리소스

.NET Framework 정규식