我试图找出为什么这个正则表达式不匹配这一行,但我没有更多的想法。
(?:([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
答案 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。