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

时间:2012-02-10 01:06:12

标签: regex

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

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

11 个答案:

答案 0 :(得分:154)

以下情况如何?

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

匹配表达式,以0开头,后跟x或者大写x,后跟0-9范围内的一个或多个字符,或者a-f或A-F

答案 1 :(得分:37)

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

/[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

ADDED MORE - 如果0x需要是可选的(如问题所示):

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

答案 2 :(得分:16)

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

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

答案 3 :(得分:10)

这将与是否有0x前缀

匹配

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

答案 4 :(得分:9)

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

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

答案 5 :(得分:4)

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

[0-9a-fA-F]

使用:

[[:xdigit:]]

答案 6 :(得分:3)

为了记录,我会指定以下内容:

    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            // HACK disables click through events by swallowing click
        }
    });

不同之处在于它检查 以包含六个有效字符,如果我们有一个,则检查小写或大写x。

答案 7 :(得分:1)

如果要在字符串中间查找特定的十六进制字符,可以使用" \ xhh"其中hh是十六进制的字符。我已经尝试过并且有效。我使用C ++ Qt的框架,但它可以解决其他情况下的问题,取决于你需要使用的风格(php,javascript,python,golang等)。

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

答案 8 :(得分:1)

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

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

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

如果您在输入中需要此命令,用户也可以输入if( getCookie('yb_uid') != null) { if( getCookie('yb_sid') != null ) { setCookie('yb_uid', getCookie('yb_uid'), 730); setSessionCookie(getCookie('yb_sid')); } else { setCookie('yb_uid', getCookie('yb_uid'), 730); setSessionCookie(setSID()); } } else { setCookie('yb_uid', setUID(),730); setSessionCookie(setSID()); } if( getCookie('yb_sid') == null || getCookie('yb_sid') == 'undefined' || !getCookie('yb_sid') ) { setSessionCookie(setSID()); } function setUID() { return "ybID#"+_setID(5)+"-"+_setID(5)+"-"+Date.now(); } function setSessionCookie(value) { var now = new Date(); var minutes = 30; now.setTime(now.getTime() + (minutes * 60 * 1000)); document.cookie = "yb_sid=" + value + "; max-age="+now.toUTCString()+"; expires="+now.toUTCString()+"; path=/"; } /*set session cookie*/ function getCookie(name) { var re = new RegExp(name + "=([^;]+)"); var value = re.exec(document.cookie); return (value != null) ? unescape(value[1]) : null; } /* get cookie value */ function _setID(length){ var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; var charactersLength = characters.length; for(var i = 0; i < length; i++ ) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } function setSID(){ var ts = Math.round(+new Date()+Math.random()/1000); return ts; } function setCookie(name, value, days){ if (days){ var date = new Date(); date.setTime(date.getTime()+days*24*60*60*1000); var expires = "; max-age="+date.toGMTString()+" expires=" + date.toGMTString(); } else { var expires = ""; } document.cookie = name+"=" + value+expires + ";path=/"; } 0,但不能输入没有0x前缀的十六进制数字:

0x