2010-02-24 118 views
0

我對preg_match不太好,所以請原諒我,如果這很容易。到目前爲止,我有...需要幫助的PHP preg_match

preg_match("/".$clear_user."\/[0-9]{10}/", $old_data, $matches) 

事情我想匹配的樣子..

:用戶名/時間()

眼下,會的preg_match有一個問題22/1266978013和2/1266978013。我需要弄清楚如何匹配冒號。

此外,有沒有一種方法來匹配所有的數字,直到下一個冒號,而不是僅僅在未來10個號碼,因爲時間()可多於或少於10

+0

顯示刪除我的回答$ OLD_DATA – ghostdog74 2010-02-24 01:39:07

回答

2

試試這個作爲你的模式:

#:$userId/[0-9]+# 

preg_match("#:$userId/[0-9]+#", $old_data, $matches); 
+0

一個完整的例子,因爲它是幾乎一樣的你,除了你可以使用\ d +代替[0-9] + – Erik 2010-02-24 01:49:38

+0

這個工作太好了,謝謝!爲了讓我可以更好地學習preg_match,我們可以做些什麼? – Chris 2010-02-24 01:52:31

+0

@Chris#號只是一個分隔符。 – waiwai933 2010-02-24 02:03:29

0
preg_match("/:*".$clear_user."\/[0-9]{10}/", $old_data, $matches); 
0

你需要擴展你的對手,包括在你的模式:分隔符。 不這樣做會導致你已經經歷的不穩定的行爲。

順便說一句,它並不那麼不穩定:考慮到你提交的兩個案例: 22/1266978013和2/1266978013。 正則表達式引擎匹配:2(2/1266978013):(2/1266978013)你的模式兩次。如果你理解字段分隔符(:),你可以確保只有預期的目標會受到影響。

我會使用preg_replace來直接替換你發現的模式,一旦你開啓了昂貴的正則表達式引擎,你應該對我來說,讓它執行儘可能多的工作。

$pattern='#:'.$clear_user.'/[0-9]{10}#'; 
$replacement = ":$clear_user/$new_time" 
$last_message=preg_replace($pattern, $replacement, $old_data ,-1,$matches); 
if (!$matches) { 
    $last_message .= $replacement; 
}