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


113

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

例如,“ 0x0f4”,“ 0acdadecf822eeff32aca5830e438cb54aa722e3”和“ 8BADF00D”。


1
正则表达式并没有真正解析。尝试提取所有类似数字的内容,然后筛选出非十六进制的内容。
Blender '02

Answers:


193

接下来呢?

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

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


35
可以简化为/0x[\da-f]/i,但否则可以+1。
Niklas B.

20
@NiklasB。您的速记仅在使用perl regex时有效,如果使用POSIX regex,则Steven的解决方案是最短的。无论哪种方式,Steven的解决方案都适用于perl和POSIX regex。
大卫·塞兹德

得到它了!如果十六进制数字以0x或0X开头,则Steven的解决方案很好。这应该更好地工作:^ [0-9A-F] + $它也可以识别十六进制模式,例如:'535GH0G73'对于Java,我们可以使用例如String.matches()进行检查。.谢谢大家的答复:)
手术室2012年

2
'0x [\ da-f] {2}'也可能更好地限制了数字
Yazan Rawashdeh,2016年

2
第二个和第三个示例编号0acdadecf822eeff32aca5830e438cb54aa722e3和8BADF00D是否匹配?
彼得·莫滕森

43

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

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

或更简单地说,i使其不区分大小写。

/[0-9a-f]+/i

如果您有幸使用Ruby,可以执行以下操作:

/\h+/

编辑 -史蒂文·施罗德(Steven Schroeder)的回答使我意识到我对0x位的理解是错误的,因此我相应地更新了我的建议。如果您还想匹配0x,则等效项为

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

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

/(0x)?[0-9a-f]+/i

您能为我解释以上RE的原因吗?
saurcery 2012年

4
@noobDroid您想让我具体解释什么?
SimonMayer 2012年

18

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

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



11

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

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


3

仅作记录,我将指定以下内容:

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

其不同之处在于它的检查,它具有包含六个有效字符,并在情况下,大写或小写x我们有一个。


2

如果要在字符串的中间查找特定的十六进制字符,则可以使用“ \ xhh”,其中hh是十六进制字符。我已经尝试过了,而且效果很好。我使用C ++ Qt框架,但是它可以解决其他情况下的问题,具体取决于您需要使用的样式(php,javascript,python,golang等)。

该答案来自:http : //ult-tex.net/info/perl/


嘿! 尽管对于perl来说可能是这样,但并非所有编程语言中的正则表达式都并非如此。根据这个 \x就是相当于\u其他语言。
Maurice

什么是“特定的安达”?
彼得·莫滕森

0

这确保您有不超过三个有效对:

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

多于或少于三对的有效字符将不匹配。


0

如果您需要在用户可以输入的输入中使用它00x但也可以输入没有0x前缀的十六进制数字:

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

0

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

^#[0-9a-fA-F]{6}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.