下面有这个正则表达式
^(((\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/