如何在数组中过滤此内容?

时间:2011-01-27 11:03:32

标签: php arrays loops

我有像这样的标签

search100
web250
seo36
analytics5060
traffic8000
web2.0

我想删除此标记中的数字,以便我可以在php中使用此代码

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

但是我想保持web2.0没有完整...我在使用循环时如何过滤这个...我确实有超过100k这样的标签。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

从您的模糊描述和小样本中,您似乎可以使用:

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

这将节省2.0后缀,因为它会查找两个连续的数字作为最小值。但另一种实现它的方法是负面的后视(?<!2\.)\d+$