2011-03-29 210 views
4

大家好
我怎樣才能獲得數(正NUM),如果字符串語法如下:reqular EXP從字符串從字符串獲得最後的數字

t_def_type_id_2
t_def_type_id_22
t_def_type_id_334

所以,所述第一串中我想要得到1,並且在第二i想要得到22和第三串在我想用preg_match_all或任何其他sutable PHP函數以獲得334

回答

2

如果字符串中只有一個號碼,只需使用\d+

+1

這將匹配0個或多個數字。更可能你想\ d + – Cfreak 2011-03-29 14:11:24

+0

固定,謝謝.. – 2011-03-29 14:13:12

5

您可以使用正則表達式

\d+$ 

preg_match

2

試試這個:

preg_match('/^\w+(\d+)$/U', $string, $match); 
$value = (int) $match[1]; 
+1

與[@ian's answer](http://stackoverflow.com/questions/5473865/reqular-exp-to-get-last-number-from-string/5474000 #5474000),這隻會捕獲最後一位數字。 '\ w +'最初會吞噬整個字符串,然後它會一次回退一個位置,直到正則表達式的其餘部分得到滿足。由於'(\ d +)'只有*必需*來匹配一個數字,這就是它得到的。 – 2011-03-29 15:05:55

+0

好點。不公正的匹配應該可以做到。我已經更新了我的答案。 – 2011-03-29 16:09:44

0

您可以使用preg_replace()

$defTypeID = preg_replace("/^(.*?)(\d+)$/", "$2", $defTypeIDString); 
1

您可以使用

str_replace('t_def_type_id_',''); 
+1

出左邊場! – Matt 2011-03-29 14:13:37

0
$string = "t_def_type_id_2 
t_def_type_id_22 
t_def_type_id_334"; 

preg_match_all("#t_def_type_id_([0-9]+)#is", $string, $matches); 

$matches = $matches[1]; 
print_r($matches); 

結果:

Array 
(
    [0] => 2 
    [1] => 22 
    [2] => 334 
) 
0

如果它總是在你的字符串中的最後一件事,然後使用一個平庸的字符串函數的方法是可能的,看起來有點緊湊:

$num = ltrim(strrchr($string, "_"), "_"); 
0

您可以使用

^\w+(\d+)$ 

,但我沒有測試

+0

將無法​​工作 - 這將只捕獲最後一位數字。 – 2011-03-29 14:38:36

+0

^\ [^ \ d +] +(\ d +)$ – ian 2011-03-30 05:44:24

0

這裏是我的替代解決方案。

$number = array_pop(explode('_', $string)); 
1

怎麼樣下面的代碼:

^[\ d] +(\ d +)$