범위가 수정된 정규식 패턴

정규식은 .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