我試圖找出爲什麼這個正則表達式不符合這條線,但我沒有更多的想法。與十六進制正則表達式的空格
(?:([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 $結果
我試圖找出爲什麼這個正則表達式不符合這條線,但我沒有更多的想法。與十六進制正則表達式的空格
(?:([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 $結果
該正則表達式不匹配行,假設你已經粘貼到你的問題的線路正是你對匹配的行:
<?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
你怎麼知道這是兩個空間而不是一個標籤?試試這個正則表達式:
/^(?:([a-f0-9]{2})\s*)+$/i
請注意,我已經收窄,只匹配十六進制,不根據-36。此外,它可能是你的正則表達式不匹配,因爲它正在尋找字符串末尾的空格。
原因只有幾個原因,爲什麼這應該不符合您的輸入。請檢查該行是否以兩個空格結尾,並且每個數字之間是否真的有兩個空格字符。此外,請檢查您的輸入是否包含字符代碼160(不可分割的空間),因爲據我所知,PCRE不會將其識別爲\ s。
哦,謝謝你,你是可靠的。問題解決了。 – Fedcomp 2012-07-12 17:50:19
@Fedcomp如果你只想得到它們的數組,你可以使用'explode('',$ hex)'(兩個空格作爲分隔符) – Umbrella 2012-07-12 18:01:33
@Umbrella:該方法實際上並不匹配所需的模式,並且會錯誤地輸入,例如'「!?^ $」'。它也會在最後留下一個'NULL'數組元素(由於尾部空格),即使是測試輸入。 – FtDRbwLXw6 2012-07-13 12:54:52