正则表达式为十六进制数?

sau*_*ery 96 regex

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

例如,'0x0f4','0acdadecf822eeff32aca5830e438cb54aa722e3'和'8BADF00D'.

Ste*_*der 164

以下怎么样?

0[xX][0-9a-fA-F]+
Run Code Online (Sandbox Code Playgroud)

匹配表达式以0开头,后跟较低或较大的x,后跟0-9,或af或AF范围内的一个或多个字符

  • 这可以缩短为`/ 0x [\ da-f]/i`,否则为+1. (33认同)
  • @NiklasB.你的速记只有在使用perl正则表达式时才有效,如果使用POSIX正则表达式,那么Steven的解决方案是最短的.无论哪种方式,Steven的解决方案都适用于perl和POSIX正则表达式. (18认同)
  • '0x [\ da-f] {2}'也更好地限制数量 (2认同)
  • 这会匹配第二个和第三个示例数字,0acdadecf822eeff32aca5830e438cb54aa722e3和8BADF00D吗? (2认同)

Sim*_*yer 39

确切的语法取决于您的确切要求和编程语言,但基本上:

/[0-9a-fA-F]+/
Run Code Online (Sandbox Code Playgroud)

或者更简单地说,i使它不区分大小写.

/[0-9a-f]+/i
Run Code Online (Sandbox Code Playgroud)

如果你有幸使用Ruby,你可以这样做:

/\h+/
Run Code Online (Sandbox Code Playgroud)

编辑 - 史蒂文施罗德的回答让我意识到我对0x位的理解是错误的,所以我相应地更新了我的建议.如果你还想匹配0x,那么等价物是

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i
Run Code Online (Sandbox Code Playgroud)

添加更多 - 如果0x需要是可选的(如问题所示):

/(0x)?[0-9a-f]+/i
Run Code Online (Sandbox Code Playgroud)

  • @noobDroid你有什么特别要我解释的? (4认同)

sma*_*thy 17

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

因此,请求的正则表达式(即可选0x)是:/(0x)?[[:xdigit:]]+/


Paw*_*iak 10

这将匹配或不匹配0x前缀

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


Ada*_*ane 10

值得一提的是,检测MD5(这是其中一个示例)可以通过以下方式完成:

[0-9a-fA-F]{32}
Run Code Online (Sandbox Code Playgroud)


joa*_*him 7

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

[0-9a-fA-F]
Run Code Online (Sandbox Code Playgroud)

和:

[[:xdigit:]]
Run Code Online (Sandbox Code Playgroud)


小智 6

只是为了记录,我将指定以下内容:

/^[xX]?[0-9a-fA-F]{6}$/
Run Code Online (Sandbox Code Playgroud)

不同之处在于它检查它是否必须包含六个有效字符以及小写或大写的 x(如果有的话)。


小智 5

另一个示例:css 颜色的十六进制值以井号或井号 (#) 开头,然后是六个字符,可以是数字或 A 和 F 之间的字母(含)。

^#[0-9a-fA-F]{6}
Run Code Online (Sandbox Code Playgroud)