RegEx : 가능한 가장 작은 일치 또는 욕심없는 일치


답변:


192

같은 정규 표현식의 경우 .*.+, APPEND 물음표 ( .*?또는 .+?) 가능한 한 적은 수의 문자로 일치합니다. 섹션을 선택적으로 일치 (?:blah)?하지만 절대적으로 필요한 경우가 아니면 일치하지 않으려면 (?:blah){0,1}?. 반복되는 일치 ( {n,}또는 {n,m}구문 사용)의 경우 물음표를 추가하여 가능한 한 적게 일치 {3,}?시키 십시오 (예 : 또는 {5,7}?).

정규식 한정자 에 대한 문서 도 도움이 될 수 있습니다.


7
이 오해가있는 유일한 사람인지는 모르겠지만주의해야합니다. 탐욕스럽지 않은 연산자가 가능한 한 적은 수의 문자와 일치하는 것은 사실이지만 여전히 찾고있는 일치하지 않을 수도 있습니다. 에 대한. "가능한 적은 문자"는 RegEx 표준과 관련하여 "가능한 가장 짧은 일치"와 같지 않습니다. 내 의견 아래의 답변을 참조하십시오. abcabka.+?k, RegEx는 전체 문자열과 일치합니다.
finefoot

Line2 "그러나 꼭 필요한 경우가 아니면 일치하지 않음": 이것은 무엇을 의미합니까?
Raining


45

탐욕스럽지 않은 연산자는 가능한 가장 짧은 일치를 의미하지 않습니다.

Abcabk

a.+?k 마지막 세 개의 기호 대신 전체 문자열 (이 예에서)과 일치합니다.

대신 가능한 가장 작은 일치를 찾고 싶습니다.

그것은 a모든 일치를 계속 허용하는 ' '에 대한 마지막 가능한 일치입니다 k.

그렇게하는 유일한 방법은 다음과 같은 표현식을 사용하는 것입니다.

a[^a]+?k


2
또는 일치 항목이 중첩 된 경우 끝에서 시작하여 역순으로 검색합니다 : "(ab (abk) bk)".
LBogaardt

7
@LBogaardt 어떻게 역순으로 검색합니까? 그것은하지 않습니다
azerafati

2
@LBogaardt 여전히 열린 질문 : 한 번의 검색을 역순으로하는 방법은 무엇입니까? 내가 얻고 싶다고하자 cab. 내 입력이 caaacab있고 검색 a.*?b하면 짧은 일치 대신 전체 문자열이 반환됩니다. 에서 거꾸로 검색하려면 b어떻게 해야 합니까?
C4d

3
문자열을 뒤집은 다음 정규식을 적용하십시오.
Jonathan Allen

3
이것은 매우 유용합니다. 여기에서 무슨 일이 일어나고 있는지 이해하려는 저와 같은 사람들에게 일반적인 형식은 START[^START]*?END(START 및 END가 시작 및 끝 문자 정규식입니다)입니다. 그것은 본질적으로 "(가)의 사이에 문자를 다시 시작 포함되지 않습니다 처음부터 끝까지 일치 아무것도"의미
derekantrican
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.