带有空格的十六进制的正则表达式

时间:2012-07-12 17:20:00

标签: php regex hex

我试图找出为什么这个正则表达式不匹配这一行,但我没有更多的想法。

(?:([a-zA-Z0-9]{2})\s\s)+
53  65  72  76  65  72  3a  20  41  70  61  63  68  65  00  45  

但是这并没有捕获所有的十六进制字节...

UPD:我需要抓住每一口到preg_match $ results

3 个答案:

答案 0 :(得分:1)

你怎么知道那是两个空格而不是标签?试试这个正则表达式:

/^(?:([a-f0-9]{2})\s*)+$/i

请注意,我已将其缩小到仅匹配hex,而不是base-36。此外,你的正则表达式可能不匹配,因为它正在字符串末尾寻找一个空格。

答案 1 :(得分:1)

正则表达式确实匹配该行,假设您粘贴到问题中的行恰好是您要匹配的行:

<?php
$hex = "53  65  72  76  65  72  3a  20  41  70  61  63  68  65  00  45  ";

preg_match('/(?:([a-zA-Z0-9]{2})\s\s)+/', $hex, $matches);
var_dump($matches);

输出:

array(2) {
  [0]=>
  string(64) "53  65  72  76  65  72  3a  20  41  70  61  63  68  65  00  45  "
  [1]=>
  string(2) "45"
}

你很可能要做的就是得到一个单独的十六进制字节的数组,所以如果你使用的代码与上面的代码类似,那么你做错了。它应该是这样的,而不是:

preg_match_all('/([a-zA-Z0-9]{2})\s{2}/', $hex, $matches);
// $matches[1] will be your array of hex bytes

答案 2 :(得分:0)

原因只有几个,为什么这不符合你的输入。请检查该行是否以两个空格结尾,并且每个数字之间是否确实有两个空白字符。还要检查你的输入是否包含字符代码160(牢不可破的空间),因为据我所知,PCRE不会将其识别为\ s。