2012-02-27 70 views
1
$str = 'title="room 5 stars"'; 
preg_match_all('/title="([0-9]+)"/sm', $str, $rate); 

我需要從標題中抓取數字5。正則表達式不起作用!使用Preg_Match抓取編號

如果我這樣做:

preg_match_all('/title="([0-9]+)"/sm', $str, $rate); 

我得到:

room 5 stars 

然而,這一個不返回任何東西:

'/title="([0-9]+)"/sm' 

哪兒我去錯了嗎?

回答

3

你沒有考慮到周圍數的話,試試這個:

$str = 'title="room 5 stars"'; 
preg_match_all('/title=".*(\d+).*"/', $str, $rate); 

// The number is then in $rate[1][0]; 
1

你忘了之前和你的電話號碼後,文本相匹配。 與嘗試:/title=".*([0-9]+).*"/

PS:你不需要小號選項

0

*是一個貪婪的匹配,它有時會給出錯誤的結果。

您可以使用/title=".*?(\d+).*?"/這是一個懶惰的匹配,並會搜索最少的字符。

你也可以試試這個免費工具,正則表達式匹配:RegExr

+0

你有沒有實際測試過你的正則表達式?它將匹配字符串,但不會捕獲該數字。 – ohaal 2012-02-27 13:12:04

+0

@ohaal沒有冒犯,但你能告訴我這個錯誤,所以我不會在將來做。我編輯了組匹配的代碼。 – Vishal 2012-02-27 13:19:00

+1

我很抱歉在我之前的評論中沒有詳細說明,我很着急。刪除了-1,因爲它似乎已經修復了您的答案。你有'/ title =「。*?(\ d)*。*?」/',它沒有捕獲實際的數字。原因是'*'等價於'{0,}',並且由於非貪婪匹配'。*?'沒有任何可匹配的地方,所有的字符串都會與最後一個非貪婪''*?'匹配。 – ohaal 2012-02-27 13:51:25