所以我有一个像这样的值列表:
values: n,b,f,d,e,b,f,ff`
我想使用preg_replace()
来从值列表中删除重复的字符(它将被插入到MySQL表中)。重复b
和f
。 ff
不应计为f
,因为它的值不同。我知道\b \b
将用于此。我不确定如何取出重复的b和f值以及每个值之前的,
。
答案 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;
}