Regex 十六进制数的正则表达式?

Regex 十六进制数的正则表达式?,regex,Regex,如何创建检测文本中十六进制数的正则表达式 例如,“0x0f4”、“0ACDADECF82EEFF32ACA5830E438CB54AA722E3”和“8BADF00D”。以下内容如何 0[xX][0-9a-fA-F]+ 匹配以0开头的表达式,后跟小写或大写x,后跟一个或多个范围为0-9、a-f或a-f的字符。确切的语法取决于您的确切要求和编程语言,但基本上: /[0-9a-fA-F]+/ 或者更简单地说,i使其不区分大小写 /[0-9a-f]+/i 如果您有幸使用Ruby,您可以: /\h

如何创建检测文本中十六进制数的正则表达式


例如,“0x0f4”、“0ACDADECF82EEFF32ACA5830E438CB54AA722E3”和“8BADF00D”。

以下内容如何

0[xX][0-9a-fA-F]+

匹配以0开头的表达式,后跟小写或大写x,后跟一个或多个范围为0-9、a-f或a-f的字符。确切的语法取决于您的确切要求和编程语言,但基本上:

/[0-9a-fA-F]+/
或者更简单地说,
i
使其不区分大小写

/[0-9a-f]+/i
如果您有幸使用Ruby,您可以:

/\h+/
编辑-史蒂文·施罗德的回答让我意识到我对0x位的理解是错误的,因此我相应地更新了我的建议。 如果还希望匹配0x,则等效项为

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i
添加了更多-如果0x需要是可选的(如问题所示):


这将匹配有或没有
0x
前缀


(?:0[xX])?[0-9a-fA-F]+

没什么大不了的,但是大多数正则表达式引擎支持POSIX字符类,并且有用于匹配十六进制字符的
[:xdigit://code>,这比普通的
0-9a-fA-F
更简单


因此,请求的正则表达式(即带有可选的
0x
)是:
/(0x)?[:xdigit:]+/
,值得一提的是,检测MD5(这是示例之一)可以通过以下方法完成:

[0-9a-fA-F]{32}

此选项确保您的有效对不超过三对:

(([a-fA-F]|[0-9]){2}){3}

任何多于或少于三对的有效字符都无法匹配。

如果您使用的是Perl或PHP,则可以替换

[0-9a-fA-F]
与:


为了记录在案,我将指定以下内容:

/^[xX]?[0-9a-fA-F]{6}$/

不同之处在于,它检查它<强>已经包含了六个有效字符,而在小写或大写X的情况下,我们有一个。

如果你在字符串中间寻找一个特定的十六进制字符,你可以使用“\xHh”,其中HH是十六进制的字符。我试过了,效果不错。我使用C++的QT框架,但是它可以解决其他情况下的问题,取决于你需要使用的味道(PHP、JavaScript、Python、Gangon等)。
这个答案取自:

如果您需要在输入中输入,用户也可以键入
0
0x
,但不能键入没有
0x
前缀的十六进制数:

^0?[xX]?[0-9a-fA-F]*$

另一个例子:css颜色的十六进制值以磅符号或散列(#)开头,然后是六个字符,可以是数字,也可以是介于a和F之间的字母(包括)

^#[0-9a-fA-F]{6}

正则表达式并不真正解析。尝试提取所有类似数字的内容,并筛选出不是十六进制的内容。这可以简化为
/0x[\da-f]/i
,否则为+1。@NiklasB。您的速记仅在使用perl正则表达式时有效,如果使用POSIX正则表达式,则Steven的解决方案是最短的。不管怎样,Steven的解决方案都适用于perl和POSIX正则表达式。明白了!如果十六进制数以0x或0x开头,Steven的解决方案是好的。这一个应该更好:^[0-9A-F]+$它还可以识别十六进制模式,例如:“535GH0G73”,对于Java,我们可以使用例如String.matches()来检查这一点。。谢谢大家的回复:)'0x[\da-f]{2}'最好将数字限制为与第二个和第三个示例数字0ACDADECF82EEFF32ACA5830E438CB54AA722E3和8BADF00D匹配的数字。你能解释一下上面的原因吗?@noobDroid你想让我具体解释什么吗?这应该是一个完整的答案。嘿!虽然perl可能是这样,但并非所有编程语言中的正则表达式都是这样。根据
\x
在其他语言中等同于
\u
。什么是“特殊anda”?不幸的是,不是powershell或.net。
/^[xX]?[0-9a-fA-F]{6}$/
^#[0-9a-fA-F]{6}