一个项目升级到 .NET 7 后,一个正则表达式出现了问题,重现问题的代码如下:
var regex = new Regex(
@"(?<url>https?://(?<host>[^./]+([.][^. /]+)*[.][a-zA-Z]{2,3})(:\d+)?/?[^\u0391-\uFFE5\s,]*)",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
var text = "https://www.nuget.org/packages/Cnblogs.IdentityServer4/";
var linkingText = regex.Replace(text, "<a href=\"${url}\">${host}</a>");
Console.WriteLine(linkingText);
// .net 7 output: <a href="https://www.nuget.org/pac">www.nuget.org</a>kages/Cnblogs.IdentityServer4/
匹配出来的 url 竟然变成了 https://www.nuget.org/pac
之前用 .NET 6 是正常的,上面的代码将 TargetFramework 改为 net6.0 就恢复正常输出
// .net 6 output: <a href="https://www.nuget.org/packages/Cnblogs.IdentityServer4/">www.nuget.org</a>
在 github 上提交了 issue https://github.com/dotnet/runtime/issues/78609
– dudu 2年前
– dudu 2年前\u0391-\uFFE5
包含了开尔文 K,编码是\u212A