正则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的字符。 我试过了,它工作。
这一个确保你有不超过三个有效的配对:
(([a-fA-F]|[0-9]){2}){3}
多于或less于三对有效字符不匹配。