【发布时间】:2022-01-13 07:54:11
【问题描述】:
谁能向我解释以下内容?我正在使用正则表达式来验证十六进制颜色(也可以包含 alpha 分量)。我使用的代码如下;
new Regex("^(?:[0-9a-fA-F]{3,4}){1,2}$").IsMatch(str)
我已经在各种正则表达式测试站点和 .NET Fiddle(见下文)上测试了我的表达式,并且它有效
https://dotnetfiddle.net/W33vbL
然而,在我们的应用程序(.NET Core 5)上运行服务器端却失败了。如果我附加到该进程,我会看到以下错误;
相同的表达式适用于 .NET 3.1 和 6,但不适用于 .NET 5。
【问题讨论】:
-
只是为了确保:试试
.IsMatch(Regex.Replace(str, @"[^a-fA-F0-9]+", "")) -
好吧,我没想到会看到任何我预期的不可见/不可打印字符与匹配问题。当代码和正则表达式都很好时,问题总是在数据中。
-
好的,谢谢 Lasse。这是有道理的。 (我刚刚在 LINQPad 中进行了测试,我可以选择在 .NET 3.1、5 或 6 上运行。它适用于 3.1 和 6,但不适用于 5。我认为这是一个错误,也许你应该提出问题GitHub 上的微软?)
-
不需要char数组,我基本上只是输入
new Regex("^(?:[0-9a-fA-F]{3,4}){1,2}$").IsMatch("8DB3E2"),它在.NET Core 3.1和.NET 6中返回true,但在.NET 5中返回false。是的,我确实输入了,我没有复制和粘贴,所以我确定我在模式或输入中没有隐藏或不可见或其他奇怪的字符。 -
似乎缺少一些回溯,如果我通过在
{3,4}后面添加一个问号使其非贪婪,则该模式也适用于 .NET 5。