c# - 正则表达式匹配有效的十六进制字符串但不是全部 '0'

标签 c# regex

我正在尝试编写一个 Regex 来匹配有效的十六进制字符串,但不包含全零值。

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

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

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

例如,

0x00x000x00000均无效

但是

0x01, 0x001, 0x010 有效

最佳答案

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

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

此处,在匹配 0x0X 后,如果有 1+ 个零,则 (?!0+) 否定先行匹配失败到紧靠右边的字符串末尾。

参见 regex demo

C# 可能的用法示例:

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

关于c# - 正则表达式匹配有效的十六进制字符串但不是全部 '0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976241/

相关文章:

c# - 如何从 MultiSelectList 返回 MvcHtmlString

c# - 英特尔的开源 uPNP SDK 有绝对 0 的文档,为什么?

java - Pattern 中的匹配器 (java.lang.CharSequence) 无法应用于 (java.io.BufferedReader)

c# - word文档(.doc/.docx)在用户上传后如何统计字数?

c# - csc2.exe 退出,代码为 1

c# - DataGridView 列中的数字文本框

java - 正则表达式不匹配重复数字

javascript - 需要一个正则表达式来查找不被加号包围的字符

Python 使用正则表达式和 replace() 在某些字符之间查找子字符串

regex - nginx子域重写