범위가 수정된 정규식 패턴
정규식은 .NET Framework와 .NET 6 및 이전 버전에서 일부 범위의 대/소문자 구분을 잘못 처리합니다. 이 버그는 .NET 7에서 수정되었습니다.
정규식에 이 버그로 인해 숨겨진 버그가 있거나 이 버그에 대한 해결 방법을 구현한 경우 이 버그에 대한 수정으로 인해 호환성이 손상되는 변경이 발생할 수 있습니다.
이전 동작
.NET 6 및 이전 버전에서는 다음 두 패턴이 서로 다른 결과를 생성합니다. 그러나 \xD7-\xD8
범위에는 \xD7
및 \xD8
값 자체만 포함되므로 동일한 결과(false
)를 생성해야 합니다.
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
// Evaluates to true.
Regex.IsMatch("\xF7", @"^(?i:[\xD7-\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
새 동작
.NET 7부터 예 패턴은 모두 false
로 평가됩니다.
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
// Evaluates to false.
Regex.IsMatch("\xF7", @"^(?i:[\xD7-\xD8])$", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
도입된 버전
.NET 7
호환성이 손상되는 변경의 형식
이 변경 사항은 동작 변경입니다.
변경 이유
이전 동작은 올바르지 않습니다.
권장 작업
정규식에 숨겨진 버그가 있으면 수정합니다. 이 버그에 대한 해결 방법이 있는 경우 해당 해결 방법을 제거할 수 있습니다.
영향을 받는 API
- System.Text.RegularExpressions.Regex.Count
- System.Text.RegularExpressions.Regex.EnumerateMatches
- System.Text.RegularExpressions.Regex.IsMatch
- System.Text.RegularExpressions.Regex.Match
- System.Text.RegularExpressions.Regex.Matches
- System.Text.RegularExpressions.Regex.Replace
- System.Text.RegularExpressions.Regex.Split
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기