首页 > 解决方案 > 正则表达式匹配有效的十六进制字符串,但不全是 '0'

问题描述

我正在尝试编写一个Regex以匹配有效的十六进制字符串但没有全零值。

如何编写一个Regex匹配有效的十六进制字符串是一个常识。

最简单的是^0[xX][0-9a-fA-F]+$

但是,在所有可能的十六进制字符串中,匹配零的字符串应该是无效的。

例如,

0x0, 0x00,0x00000都无效

0x01, 0x001,0x010有效

标签: c#regex

解决方案


您可以使用前瞻来限制匹配:

^0[xX](?!0+$)[0-9a-fA-F]+$
      ^^^^^^^

在这里,在匹配0xor之后,如果紧靠右侧的字符串末尾有 1+ 个零0X,则否定前瞻将导致匹配失败。(?!0+)

查看正则表达式演示

C# 可能的用法示例:

if (Regex.IsMatch(s, @"^0x(?!0+$)[0-9a-f]+$", RegexOptions.IgnoreCase))
{
    // Valid
}

推荐阅读