다음을 통해 공유


Visual Studio에서 정규식 사용

Visual Studio는 .NET 정규식 사용하여 텍스트를 찾고 대체합니다.

정규식 구문

다음 표에는 몇 가지 정규식 문자, 연산자, 구문 및 패턴 예제가 포함되어 있습니다. 자세한 참조는 정규식 언어 참조하세요.

목적 표현 본보기
줄 바꿈을 제외한 모든 단일 문자와 일치합니다. 자세한 내용은 모든 문자참조하세요. . a.o는 "around"의 "aro"와 "about"의 "abo"에는 일치하지만, "across"의 "acro"에는 일치하지 않습니다.
이전 식의 0개 이상의 발생을 일치시키다 (가능한 한 많은 문자를 포괄하여). 자세한 내용은 0회 이상 일치하는을 참조하세요. * a*r는 "rack"의 "r", "ark"의 "ar", "aardvark"의 "aar"과 일치합니다.
문자를 0번 이상 반복하여 일치시키다. .* c.*e은 "라켓"의 "cke", "코멘트"의 "comme", "코드"의 "code"와 일치합니다.
이전 식의 하나 이상의 항목을 일치합니다(가능한 한 많은 문자와 일치). 자세한 내용은 에서 한 번 이상 일치하는 항목을 참조하세요. + e+d는 "피더(feeder)"의 "eed"와 "페이드(faded)"의 "ed"라는 점에서 같습니다.
문자를 한 번 이상 일치시킬 수 있습니다. .+ e.+e "feeder"에서 "eede"를 일치시키지만 "피드"에서는 일치하지 않았습니다.
이전 식의 0개 이상의 발생 항목과 일치시키되, 가능한 한 적은 문자와 일치하도록 합니다. 자세한 내용은 0회 이상 일치시키기(지연 일치)를참조하세요. *? \w*?d는 "faded"에서 "fad"와 "ed"에 일치하지만, 느슨한 매칭으로 인해 전체 단어 "faded"와는 일치하지 않습니다.
이전 식의 하나 이상의 항목을 일치합니다(가능한 한 적은 수의 문자와 일치). 자세한 내용은 한 번 이상 매칭(지연 매칭)참조하십시오. +? e\w+? "절전"의 "ee"와 "페이드"의 "ed"와 일치하지만 "페이드"에서 일치하는 항목을 찾지 못했습니다.
일치 문자열을 줄 또는 문자열 시작 부분에 고정합니다. ^ ^car 줄의 시작 부분에 나타나는 경우에만 "car"라는 단어와 일치합니다.
일치 문자열을 줄 끝에 고정합니다. \r?$ car\r?$는 줄 끝에 "자동차"가 있을 때만 일치합니다.
일치 문자열을 파일 끝에 고정 $ 파일의 끝에 나타나는 경우에만 car$가 "car"를 일치시킵니다.
집합에서 단일 문자를 일치시키기 [abc] b[abc] "ba", "bb" 및 "bc"와 일치합니다.
문자 범위 내의 임의의 문자와 일치 [a-f] be[n-t] "between"의 "bet", "beneath"의 "ben", "beside"의 "bes"와 일치하지만 "below"에서 일치하는 항목을 찾지 않습니다.
괄호 안에 포함된 식 캡처 및 암시적으로 번호 매기기 () ([a-z])X\1 "aXa" 및 "bXb"와 일치하지만 "aXb"와는 일치하지 않습니다. "\1"은 첫 번째 식 그룹 "[a-z]"를 참조합니다. 자세한 내용은 캡처 그룹 및대체 패턴을 참조하세요.
매치 무효화 (?! abc) real(?!ity)는 "realty"와 "really"에서 "real"과 일치하지만, "reality"에서는 일치하지 않습니다. 또한 "realityreal"에서 두 번째 "real"을(첫 번째 "real"은 아님) 찾습니다.
지정된 문자 집합에 없는 문자를 찾으세요. 자세한 내용은 부정 문자 그룹참조하세요. [^abc] be[^n-t] "before"의 "bef", "behind"의 "beh", "below"의 "bel"과 일치하지만 "아래"에서 일치하는 항목을 찾지 않습니다.
기호 앞의 식이나 기호 뒤의 식 중 하나를 맞추세요. | (sponge|mud) bath "스폰지 목욕"과 "진흙 목욕"과 일치합니다.
백슬래시를 사용하여 문자을 이스케이프합니다. \ \^은 ^ 문자에 해당합니다.
이전 문자 또는 그룹의 발생 횟수를 지정합니다. 자세한 내용은 이(가) 정확히 n번 일치하는 것을 참조하세요. {n}, 여기서 'n'은 발생 횟수입니다. "xababx"는 x(ab){2}x과 일치합니다.
x(ab){2,3}x는 "xababx", "xabababx"와는 일치하지만 "xababababx"와는 일치하지 않습니다.
유니코드 범주 의 텍스트와을(를) 일치시킵니다. 유니코드 문자 클래스에 대한 자세한 내용은 유니코드 표준 15.0 문자 속성참조하세요. \p{X}, 여기서 "X"는 유니코드 번호입니다. \p{Lu} "Thomas Doe"의 "T" 및 "D"와 일치합니다.
단어 경계와 일치시키다 \b(문자 클래스 외부 \b 단어 경계를 지정하고, 문자 클래스 내에서 \b 백스페이스를 지정합니다.) \bin "inside"에서 "in"과 일치하지만 "pinto"에서는 일치하는 항목을 찾지 못합니다.
줄 바꿈(즉, 캐리지 리턴 뒤에 새 줄 또는 새 줄만 해당)을 찾습니다. \r?\n End\r?\nBegin "End"가 줄의 마지막 문자열이고 "Begin"이 다음 줄의 첫 번째 문자열인 경우에만 "End" 및 "Begin"과 일치합니다.
단어 구성 문자에 일치 \w a\wd "add" 및 "a1d"와 일치하지만 "a d"와는 일치하지 않습니다.
공백 문자와 일치합니다 \s Public\sInterface "공용 인터페이스"라는 구와 일치합니다.
십진수 숫자와 일치 \d \d "wd40"에서 "4" 및 "0"과 일치합니다.

16진수와 일치하도록 일부 연산자와 구문을 결합하는 예제 정규식은 \b0[xX]([0-9a-fA-F]+)\b. 이 표현은 "0xc67f"와 일치하지만 "0xc67g"와는 일치하지 않습니다.

Windows 운영 체제에서 대부분의 줄은 "\r\n"(캐리지 리턴 다음에 새 줄)로 끝납니다. 이러한 문자는 표시되지 않지만 편집기에서 존재하며 .NET 정규식 서비스에 전달됩니다. 웹 또는 비 Windows 운영 체제에서 파일을 처리할 때 줄 바꿈에만 새 줄을 사용할 수 있는 가능성을 고려해야 합니다.

그룹 및 대체 패턴 캡처

캡처 그룹은 정규식의 하위 표현을 묘사하고 입력 문자열의 부분 문자열을 캡처합니다. 정규식 자체 내에서 캡처된 그룹을 사용하여(예: 반복되는 단어를 찾거나) 대체 패턴을 사용할 수 있습니다. 정규식의 그룹화 구성 요소에 대한 자세한 내용은을 참조하세요.

번호가 매겨진 캡처 그룹을 만들려면 정규식 패턴에서 하위 식을 괄호로 묶습니다. 캡처는 정규식에서 여는 괄호의 위치에 따라 왼쪽에서 오른쪽으로 자동으로 번호가 매겨집니다. 캡처된 그룹에 액세스하려면 다음 예제를 고려하세요.

  • 정규식내에서 : \number사용합니다. 예를 들어 정규식 (\w+)\s\1\1 첫 번째 캡처 그룹 (\w+)참조합니다.

  • 대체 패턴: $number사용합니다. 예를 들어 그룹화된 정규식 (\d)([a-z]) 두 그룹을 정의합니다. 첫 번째 그룹에는 소수 자릿수가 하나이고 두 번째 그룹에는 z사이에 단일 문자가 포함됩니다. 식은 다음 문자열에서 4개의 일치 항목을 찾습니다. 1a 2b 3c 4d. 대체 문자열은 z$1 첫 번째 그룹($1)만 참조하고 문자열을 z1 z2 z3 z4변환합니다.

다음 이미지는 정규식 (\w+)\s\1 대체 문자열 $1보여줍니다. 정규식과 대체 패턴은 모두 자동으로 번호가 1인 첫 번째 캡처 그룹을 참조합니다. Visual Studio의 빠른 바꾸기 대화 상자에서 모든 바꾸기를 선택하면 반복되는 단어가 텍스트에서 제거됩니다.

Visual Studio에서 번호가 매겨진 캡처 그룹을 보여 주는 빠른 바꾸기 스크린샷

빠른 바꾸기 대화 상자에서, 정규식 사용 단추를 선택하거나, Alt+E를 누르세요.

명명된 캡처 그룹

캡처 그룹의 자동 번호 매기기를 사용하는 대신 이름을 지정할 수 있습니다. 명명된 캡처 그룹의 구문은 (?<name>subexpression).

번호가 매겨진 캡처 그룹과 같은 명명된 캡처 그룹은 정규식 자체 또는 대체 패턴에서 사용할 수 있습니다. 명명된 캡처 그룹에 액세스하려면 다음 예제를 고려하세요.

  • 정규식내에서 : \k<name>사용합니다. 예를 들어 정규식 (?<repeated>\w+)\s\k<repeated>\k<repeated>repeated 이름이 지정되고 하위 식이 \w+캡처 그룹을 참조합니다.

  • 대체 패턴에서 ${name}를 사용합니다. 예를 들어 ${repeated}.

다음 이미지는 정규식 (?<repeated>\w+)\s\k<repeated> 대체 문자열 ${repeated}보여줍니다. 정규식과 대체 패턴은 모두 repeated이라는 캡처 그룹을 참조합니다. Visual Studio의 빠른 바꾸기 대화 상자에서 모든 바꾸기를 선택하면 반복되는 단어가 텍스트에서 제거됩니다.

Visual Studio에서 명명된 캡처 그룹을 보여 주는 빠른 바꾸기 스크린샷

빠른 바꾸기 대화 상자에서 정규식 사용 단추(또는 Alt +E누름)를 선택해야 합니다.

명명된 캡처 그룹에 대한 자세한 내용은 명명된 매칭 하위 표현식을 참조하십시오. 대체 패턴에 사용되는 정규식에 대한 자세한 내용은 정규식 대체를 참조하세요.

예제

무늬 묘사
int ([_A-Za-z][_A-Za-z0-9]*) 단일 정수 정의를 맞춥니다. 식별자는 대문자 또는 소문자로 시작하고 0개 이상(*표시) 문자 또는 숫자로 시작합니다. 식별자가 외부 괄호에 의해 $1로 캡쳐됩니다.
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ 정수 리터럴로 초기화된 C# 정수 선언을 일치시키고 액세스 수준, const 또는 static같은 한정자, 식별자 및 정의된 값을 비롯한 다양한 부분을 캡처합니다. \s+는 하나 이상의 공백 문자가 있을 때 사용하고, 공백이 발생할 수도 있고 발생하지 않을 수도 있는 경우에는 \s*을 사용하십시오.
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) foreach 루프의 여는 줄을 맞추세요. 직접 입력된 괄호는 백슬래시(\\)로 이스케이프됩니다. 다양한 그룹은 이스케이프되지 않은 괄호로 $1, $2, 그리고 $3를 캡처합니다.
#define\s+([_A-Za-z][_A-Za-z0-9]*) #define 정의와 일치합니다(값이 없는 경우). 정의된 토큰은 $1저장됩니다.
#include\s+["<](.*)[">] C++ 소스 파일에 있는 include를 매칭합니다.