c# - C#中的正则表达式类

标签 c# .net regex

下面有这个正则表达式

^(((\s*0[xX]([0-9a-fA-F]{2}))\s*)*)

只接受

0x12 0x34 0xA2

应该拒绝

0x12, 0x34

我是这样用的

if(true != Regex.IsMatch(inputData, @"^(((\s*0[xX]([0-9a-fA-F]{2}))\s*)*)"))
{
Console.WriteLine("error");
}

但即使我给出 0x12、0x34 或任何字符串,它也总是给出 true。 有人可以解决这个问题吗?谢谢

最佳答案

您在正则表达式末尾缺少 $ 字符。 $ 字符匹配字符串或行的结尾。目前,它正在检查字符串是否以零个或多个指定长度的十六进制字符串开头。任何字符串都将以至少 0 个字符串实例开头,因此所有字符串当前都匹配。

正则表达式应该类似于 ^(((\s*0[xX]([0-9a-fA-F]{2}))\s*)*)$

或者,如果您希望它至少以这些十六进制字符串之一开头,您应该将最后一个 * 字符替换为 +,这将匹配一个或更多实例。

该正则表达式看起来像 ^(((\s*0[xX]([0-9a-fA-F]{2}))\s*)+)$

最后,如果您希望字符串之间用空格分隔,则需要稍微修改一下。这两个正则表达式都允许连续的字符串,中间没有空格。我有一种感觉,“正确”的正则表达式会变得相当难看,所以你最好在空格上使用 String.Split 并忽略空行,运行正则表达式 ^每个字符串上的 0[xX]([0-9a-fA-F]{2})$

关于c# - C#中的正则表达式类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004986/

相关文章:

c# - 在 gridview 中显示数据集(C# windows 应用程序)

C#:通用数学函数(Min、Max 等)

asp.net - 如何使用 Rc1 - Final 将 dxn 运行时设置为 .net 4.6.1

c# - 为什么反斜杠的这个替换不起作用?

c# - 允许将私有(private)变量放在 C# 中的公共(public)方法中吗?

C#从网站的html源代码中计算div中的段落

c# - 如何防止 "regex injection"?

javascript - 用于删除空格的正则表达式

c# - C# 4.0 的新酷特性

c# - 代码契约检查线程亲和性——好主意?