首页 新闻 会员 周边

升级到 .NET 7 后遇到的正则表达式问题

0
悬赏园豆:30 [待解决问题]

一个项目升级到 .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>
问题补充:

去掉 RegexOptions.IgnoreCase 就正常了

dudu的主页 dudu | 高人七级 | 园豆:30948
提问于:2022-11-20 20:24

在 github 上提交了 issue https://github.com/dotnet/runtime/issues/78609

dudu 1年前

\u0391-\uFFE5 包含了开尔文 K,编码是 \u212A

dudu 1年前
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册