Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 정규식 수량자(Quantifier) 총정리 – 기본 수량자부터 지연 수량자까지


C# 정규식 수량자(Quantifier)란?

C# 정규식에서 수량자(quantifier)는 앞의 요소(문자, 그룹 또는 문자 클래스)가 입력 문자열에서 몇 번 나타나야 일치(match)로 인정되는지를 지정하는 메타 문자입니다. 수량자를 활용하면 반복되는 패턴을 간결하고 효율적으로 표현할 수 있습니다.

기본 수량자

아래 표는 C# 정규식에서 가장 널리 사용되는 기본 수량자들을 정리한 것입니다.

수량자설명패턴일치 결과
*이전 요소와 0번 이상 일치합니다.\d*\.\d".0", "19.9", "219.9"
+이전 요소와 1번 이상 일치합니다."be+""been"의 "bee", "bent"의 "be"
?이전 요소와 0번 또는 1번 일치합니다."rai?n""ran", "rain"
{ n }이전 요소와 정확히 n번 일치합니다.",\d{3}""1,043.6"의 ",043", "9,876,543,210"의 ",876", ",543", ",210"
{ n }이전 요소와 최소 n번 일치합니다."\d{2}""166", "29", "1930"
{ n , m }이전 요소와 최소 n번, 최대 m번 일치합니다."\d{3,5}""166", "17668", "193024"의 "19302"

지연(Lazy) 수량자

기본 수량자는 가능한 한 많은 문자를 찾으려는 탐욕적(greedy) 방식으로 동작합니다. 반면, 수량자 뒤에 물음표(?)를 붙인 지연(lazy) 수량자는 가능한 한 적은 횟수만큼만 일치시킵니다.

수량자설명패턴일치 결과
*?이전 요소와 0번 이상 일치하되, 가능한 한 적게 일치합니다.\d*?\.\d".0", "19.9", "219.9"
+?이전 요소와 1번 이상 일치하되, 가능한 한 적게 일치합니다."be+?""been"의 "be", "bent"의 "be"
??이전 요소와 0번 또는 1번 일치하되, 가능한 한 적게 일치합니다."rai??n""ran", "rain"
{ n }?이전 요소와 정확히 n번 일치합니다.",\d{3}?""1,043.6"의 ",043", "9,876,543,210"의 ",876", ",543", ",210"
{ n }?이전 요소와 최소 n번 일치하되, 가능한 한 적게 일치합니다."\d{2}?""166", "29", "1930"
{ n , m }?이전 요소와 n번 이상 m번 이하로 일치하되, 가능한 한 적게 일치합니다."\d{3,5}?""166", "17668", "193024"의 "193", "024"

탐욕적 수량자와 지연 수량자의 차이

예를 들어 문자열 "193024"에 패턴 \d{3,5}를 적용하면 탐욕적 수량자는 최대 길이인 5자리 "19302"를 반환하지만, 지연 수량자 \d{3,5}?는 최소 조건인 3자리씩 "193"과 "024"로 나누어 일치시킵니다. 이처럼 매칭 목적에 맞게 탐욕적 수량자와 지연 수량자를 적절히 선택하는 것이 정확한 정규식 작성의 핵심입니다.