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


답변:


192

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

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


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