preg_replace php替换重复的字符

时间:2012-03-09 13:00:02

标签: php regex

所以我有一个像这样的值列表:

values: n,b,f,d,e,b,f,ff`

我想使用preg_replace()来从值列表中删除重复的字符(它将被插入到MySQL表中)。重复bfff不应计为f,因为它的值不同。我知道\b \b将用于此。我不确定如何取出重复的b和f值以及每个值之前的,

5 个答案:

答案 0 :(得分:4)

如果列表中的字符串与上面的例子类似,那么正则表达式就是矫枉过正。这样做也是如此;

  $value = implode(',', array_unique(explode(',', $value)));

答案 1 :(得分:3)

我同意其他评论者preg_replace不是要走的路;但是,既然你问,你可以写:

$str = preg_replace('/\b(\w+),(?=.*\b\1\b)/', '', $str);

这将除去给定list-element的 last 实例以外的所有实例。

答案 2 :(得分:2)

如果你正在处理的这个列表是一个简单的字符串,可能的解决方案是这样的:

function removeDuplicates($str) {
    $arr = explode(',', $str);
    $arr = array_unique($arr);
    return implode(',', $arr);
}

$values = removeDuplicates('n,b,f,d,e,b,f,ff'); // n,b,f,d,e,ff

答案 3 :(得分:2)

不需要正则表达式:

join(",", array_unique(split(",", $values)))

答案 4 :(得分:1)

$str = "values: n,b,f,d,e,b,f,ff";
$arr = array();
preg_match("/(values: )([a-z,]+)/i", $str, $match);
$values = explode(",", $match[2]);
foreach($values AS $value){
     if(!$arr[$value]) $arr[$value] = true;
}
$return = $match[1];
foreach($arr AS $a){
    $return .= ($i++ >= 1 ? "," : "").$a;
}