RegEx (.NET 버전)에 가장 큰 것 대신 가장 작은 유효한 일치를 얻으려면 어떻게해야합니까?
답변
같은 정규 표현식의 경우 .*
나 .+
, APPEND 물음표 ( .*?
또는 .+?
) 가능한 한 적은 수의 문자로 일치합니다. 섹션을 선택적으로 일치 (?:blah)?
하지만 절대적으로 필요한 경우가 아니면 일치하지 않으려면 (?:blah){0,1}?
. 반복되는 일치 ( {n,}
또는 {n,m}
구문 사용)의 경우 물음표를 추가하여 가능한 한 적게 일치 {3,}?
시키 십시오 (예 : 또는 {5,7}?
).
정규식 한정자 에 대한 문서 도 도움이 될 수 있습니다.
답변
탐욕스럽지 않은 연산자 ?
. 이렇게 :
.*?
답변
탐욕스럽지 않은 연산자는 가능한 가장 짧은 일치를 의미하지 않습니다.
Abcabk
a.+?k
마지막 세 개의 기호 대신 전체 문자열 (이 예에서)과 일치합니다.
대신 가능한 가장 작은 일치를 찾고 싶습니다.
그것은 a
모든 일치를 계속 허용하는 ‘ ‘에 대한 마지막 가능한 일치입니다 k
.
그렇게하는 유일한 방법은 다음과 같은 표현식을 사용하는 것입니다.
a[^a]+?k