如何创建检测文本中十六进制数字的正则表达式?
例如,'0x0f4','0acdadecf822eeff32aca5830e438cb54aa722e3'和'8BADF00D'。
答案 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等)。
答案 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