2011-11-20 46 views
1

之間的數字我有這個字符串:之間PHP:獲取2串

a:3:{i:0;i:2;i:1;i:3;i:2;i:4;} 

我想號碼「:」和「:{」,即「3」。 我嘗試用戶substr和strpos,但沒有成功。 我在正則表達式的新手,這樣寫:

preg_match('/a:(.+?):{/', $v); 

但其回報我1 感謝您的任何提示。

+2

這看起來像一個序列化的PHP數組(元素數量錯誤?)。爲什麼不反序列化它並在實際數組上使用'count()'? – knittl

回答

2

如果你知道a:總是在字符串的開頭,最簡單的方法是:

$array = explode(':', $string, 3); 
$number = $array[1]; 
1

preg_match()返回找到匹配的次數,這就是原因。你需要添加第三個參數。其中它將存儲匹配的$matches

4

preg_match返回匹配數,在你的情況1匹配。

爲了讓比賽本身,使用了第三個參數:

$matches = array(); 
preg_match(/'a:(\d+?):{/', $v, $matches); 

這麼說,我覺得串看起來像一個序列化數組,你可以用unserialize反序列化,然後實際的陣列上使用count(即$a = count(unserialize($v));)。小心雖然userprovided序列串...

1

你是不是太遠與strpos()substr()

$pos_start = strpos($str,'a:')+2; 
$pos_end = strpos($str,':{')-2; 
$result = substr($str,$pos_start,$pos_end); 

preg_match只檢查外觀,它不返回任何字符串。

+1

謝謝,但你的代碼返回 - > a:3 – Nulled

+0

的確,我忘記了$ pos_start +2的位置(對於'a:'的2個字符,現在應該沒問題了 – Anonymous

+0

現在返回 - > 3:{ – Nulled

2

您可以使用sscanfDocs從字符串獲得數:

# Input: 
$str = 'a:3:{i:0;i:2;i:1;i:3;i:2;i:4;}'; 

# Code: 
sscanf($str, 'a:%d:', $number); 

# Output: 
echo $number; # 3 

這往往比使用preg_match更簡單,當你想從下面的圖形字符串獲得一個特定的值。