2011-02-25 104 views
1

如果我有這樣的字符串:10/10/12/12PHP preg_match_all正則表達式

我使用:

$string = '10/10/12/12'; 
preg_match_all('/[0-9]+\/[0-9]+/', $string, $results); 

這似乎只匹配10/10,和12/12。我也想匹配10/12。這是因爲10/10匹配後,從圖片中刪除?所以在第一場比賽後,它只會匹配/12/12的東西?

如果我想匹配所有10/10,10/12,12/12,我的正則表達式應該是什麼樣子?謝謝。

編輯:我做這個

$arr = explode('/', $string); 
$count = count($arr) - 1; 
$newarr = array(); 
for ($i = 0; $i < $count; $i++) 
{ 
    $newarr[] = $arr[$i].'/'.$arr[$i+1]; 
} 

回答

3

我沒有使用正則表達式的建議。相反,你可以例如首先使用explode以斜線分割。然後迭代零件,檢查兩個連續零件,這兩個零件都只包含數字。


您的正則表達式不起作用的原因是因爲匹配會消耗匹配的字符。搜索下一場比賽從上一場比賽結束之後開始。

如果您確實想要使用正則表達式,則可以使用零寬度匹配(例如向前看)來避免消耗字符,並將捕獲匹配放在預見範圍內。

'#[0-9]+/(?=([0-9]+))#' 

看到它聯機工作:ideone

+0

謝謝,我編輯我的職務,以顯示我現在該怎麼做了。這是你的意思嗎?似乎工作。 – Joker 2011-02-25 21:22:05

+0

@Joker:是的。你沒有檢查部件是否是數字,但如果你可以假設他們是,那麼你的代碼對我來說似乎可以。 – 2011-02-25 21:25:51

+0

自動櫃員機應該可以避免數字檢查,但可能會考慮稍後再做,以防萬一,因爲也顯示了替代正則表達式。 – Joker 2011-02-25 21:55:14