正则expression式的hex数字?

如何创build一个正则expression式来检测文本中的hex数字?

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

以下情况如何?

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

匹配以0开头的expression式,接着是小写或大写的x,后跟0-9或者af或者AF中的一个或多个字符

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

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

或者更简单, i使它不区分大小写。

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

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

 /\h+/ 

编辑 – Steven Schroeder的回答让我意识到我对0x位的理解是错误的,所以我已经相应地更新了我的build议。 如果你也想匹配0x,那么等价的是

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

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

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

没有什么大不了的,但大多数正则expression式引擎支持POSIX字符类,并且有匹配hex字符的[:xdigit:] ,这比普通的0-9a-fA-F东西简单。

所以,正则expression式(即可选的0x )是: /(0x)?[[:xdigit:]]+/

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

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

值得一提的是,检测一个MD5(这是一个例子)可以用下面的方法完成:

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

如果您使用Perl或PHP,则可以replace

 [0-9a-fA-F] 

有:

 [[:xdigit:]] 

只是为了logging,我会指定以下内容:

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

不同之处在于,它检查它必须包含六个有效字符,如果有一个,则使用小写字母或大写字母x。

如果要在string中间寻找特殊的hex字符,可以使用“\ xhh”,其中hh是hex的字符。 我试过了,它工作。

http://ult-tex.net/info/perl/

这一个确保你有不超过三个有效的配对:

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

多于或less于三对有效字符不匹配。