2012-07-12 154 views
0

我試圖找出爲什麼這個正則表達式不符合這條線,但我沒有更多的想法。與十六進制正則表達式的空格

(?:([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 $結果

回答

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 
+0

哦,謝謝你,你是可靠的。問題解決了。 – Fedcomp 2012-07-12 17:50:19

+0

@Fedcomp如果你只想得到它們的數組,你可以使用'explode('',$ hex)'(兩個空格作爲分隔符) – Umbrella 2012-07-12 18:01:33

+0

@Umbrella:該方法實際上並不匹配所需的模式,並且會錯誤地輸入,例如'「!?^ $」'。它也會在最後留下一個'NULL'數組元素(由於尾部空格),即使是測試輸入。 – FtDRbwLXw6 2012-07-13 12:54:52

1

你怎麼知道這是兩個空間而不是一個標籤?試試這個正則表達式:

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

請注意,我已經收窄,只匹配十六進制,不根據-36。此外,它可能是你的正則表達式不匹配,因爲它正在尋找字符串末尾的空格。

0

原因只有幾個原因,爲什麼這應該不符合您的輸入。請檢查該行是否以兩個空格結尾,並且每個數字之間是否真的有兩個空格字符。此外,請檢查您的輸入是否包含字符代碼160(不可分割的空間),因爲據我所知,PCRE不會將其識別爲\ s。

相關問題