2011-01-27 96 views
1

我有這樣的如何過濾數組?

search100 
web250 
seo36 
analytics5060 
traffic8000 
web2.0 

我想從這個標籤刪除號碼,所以我可以在PHP

preg_replace("/\d+$/gm", "", input) 

使用此代碼標籤,但我想保持web2.0不完整的......怎麼辦當我使用循環時,我會對此進行過濾。我確實有超過100k個標籤。

+0

你能提供更多你不想剝離的標籤的例子嗎?目前還不清楚是什麼讓'web2.0'變得特別。這是兩個數字之間的「。」嗎?它是否在非數字字符之前有數字? – marcog 2011-01-27 11:10:20

回答

2

您可以使用模式/(\w)\d+$/m$1作爲替代:

preg_replace('/(\w)\d+$/m', '$1', $input) 

這種模式需要有數字的序列之前至少一個字字符。

,並應用一個數組中的每個元素這種替換使用array_map

array_map(function($elem) { return preg_replace('/(\w)\d+$/m', '$1', $elem); }, $arr); 

如果您不能使用anonymous function(可用自PHP 5.3)就像在我的例子,你可以定義一個單獨的功能,請改用create_function或僅使用foreach

+0

非常感謝你 – leon 2011-01-27 11:16:32

0

從你模糊的描述和小樣本,看來你可以只使用:

$input = preg_replace("/\d\d+$/m", "", $input); 

這將騰出2.0後綴,因爲它看起來連續兩個數字爲最低。但另一種實現方法是負面的反面(?<!2\.)\d+$