비 욕심 모드: 매칭이 가능한 경우, 가장 짧은 을 매칭합니다. 표현식은 ?으로 끝납니다.
예를 들어 문자열 abcabcabc에서 a로 시작하고 c으로 끝나는 문자열을 일치시키려면 abc, abcabc, abcabcabc 세 가지 일치 항목이 있습니다. 가장 긴 abcabcabc은 a.*c과 일치할 수 있고, 가장 짧은 abc은 a.*?c과 일치할 수 있습니다.
으아아아
결과가 비어 있는 이유는 무엇인가요? 고양이여야 하지 않나요?
.*은 그리디 패턴이므로 각 문자가 임의의 문자(.)로 구성된 가장 긴 문자열, 즉 모든 입력 문자로 구성된 문자열과 일치합니다. 그리고 .*?는 non-greedy 모드로, 각 문자가 임의의 문자(.)인 가장 짧은 문자열, 즉 빈 문자열과 일치합니다.
고양이라는 단어를 일치시키려면 cats을 사용해야 합니다. 입력 문자열의 첫 번째 단어를 일치시키려면 w+ 또는 S+을 사용해야 합니다.
으아아아
기본적으로 문자열 앞에 null 문자가 있나요?
아니요, 하지만 정규식에서는 ^를 사용하여 문자열의 시작 위치를 나타내고 $을 사용하여 끝 위치를 나타낼 수 있습니다. 이 두 문자(^ 및 $)는 일치 규칙에 의해 지정된 기호이며 사용자가 작성하는 규칙 문자열에 사용된다는 점에 유의하세요. 이는 일치할 문자열에 이 두 기호가 포함되어 있다는 의미는 아닙니다.
결론적으로 말하면 "모든 문자가 0번 등장한다"는 의미이므로 아무것도 없습니다..
= 임의의 문자*
= 0회 이상 나타남,{0,}
?
과 동일, 이전 일치 항목이 가장 적은 문자 선택,{0,1}
과 일치하려면
cats
,cats
뒤에 공백을 사용해야 합니다.r'(.*?) '
개인적인 이해에 따르면
이 예는.*?
는 시작 위치인^
과 일치하며 정규식에서는 다음과 같이 위치도 일치할 수 있습니다. 으아아아을 대체하고
^
에도 동일하게 적용되므로$
은.*?
과 직접 일치합니다.^
PS: 정규 표현식을 사용할 때, 특히 텍스트 콘텐츠가 많은 경우은 사용하지 않는 것이 좋지만
.*
또는[sS]*
등은 사용하지 않는 것이 좋습니다.[dD]*
정규식 탐욕적 일치와 비탐욕적 일치의 차이점은 다음과 같습니다.
그리디 모드: 매칭이 가능할 때 가장 긴 을 매칭합니다.
?
으로 끝나지 않는 표현입니다.비 욕심 모드: 매칭이 가능한 경우, 가장 짧은 을 매칭합니다. 표현식은
?
으로 끝납니다.예를 들어 문자열
으아아아abcabcabc
에서a
로 시작하고c
으로 끝나는 문자열을 일치시키려면abc
,abcabc
,abcabcabc
세 가지 일치 항목이 있습니다. 가장 긴abcabcabc
은a.*c
과 일치할 수 있고, 가장 짧은abc
은a.*?c
과 일치할 수 있습니다..*
은 그리디 패턴이므로 각 문자가 임의의 문자(.
)로 구성된 가장 긴 문자열, 즉 모든 입력 문자로 구성된 문자열과 일치합니다. 그리고.*?
는 non-greedy 모드로, 각 문자가 임의의 문자(.
)인 가장 짧은 문자열, 즉 빈 문자열과 일치합니다.고양이라는 단어를 일치시키려면
으아아아cats
을 사용해야 합니다. 입력 문자열의 첫 번째 단어를 일치시키려면w+
또는S+
을 사용해야 합니다.아니요, 하지만 정규식에서는
^
를 사용하여 문자열의 시작 위치를 나타내고$
을 사용하여 끝 위치를 나타낼 수 있습니다. 이 두 문자(^
및$
)는 일치 규칙에 의해 지정된 기호이며 사용자가 작성하는 규칙 문자열에 사용된다는 점에 유의하세요. 이는 일치할 문자열에 이 두 기호가 포함되어 있다는 의미는 아닙니다.
문자열을 일치시킬 수 없습니다..
경계 일치는 일치하는 문자열의 문자를 소비하지 않으며 비탐욕 모드이므로