preg_替换php以替换重复字符
我有一个类似的值列表,如下所示:preg_替换php以替换重复字符,php,regex,Php,Regex,我有一个类似的值列表,如下所示: values: n,b,f,d,e,b,f,ff` 我想使用preg_replace()从值列表中删除重复的字符(它将被插入到MySQL表中)b和f重复ff不应算作f,因为它是不同的值。我知道\b\b将用于此。我不确定如何取出重复的b和f值以及每个值前面的,。如果您处理的列表是一个简单的字符串,可能的解决方案如下: function removeDuplicates($str) { $arr = explode(',', $str); $arr
values: n,b,f,d,e,b,f,ff`
我想使用
preg_replace()
从值列表中删除重复的字符(它将被插入到MySQL表中)<代码>b和f
重复ff
不应算作f
,因为它是不同的值。我知道\b\b
将用于此。我不确定如何取出重复的b和f值以及每个值前面的,
。如果您处理的列表是一个简单的字符串,可能的解决方案如下:
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
不需要正则表达式:
join(",", array_unique(split(",", $values)))
如果列表是一个类似于上面示例的字符串,则正则表达式是多余的。这样做也很好
$value = implode(',', array_unique(explode(',', $value)));
我同意其他评论者的看法,即
preg_replace
不是一条可行之路;但是,既然你问了,你可以写:
$str = preg_replace('/\b(\w+),(?=.*\b\1\b)/', '', $str);
这将除去给定列表元素的最后一个实例以外的所有实例。我认为正则表达式在这里是错误的方法。它是什么类型的列表?只有正则文本。不是arrayHmm,Joachim Isaksson和JRL都有更好的答案。谢谢你的答案,正则表达式总是很好学!我会选择JRL,因为它是最短的代码。为什么会否决它?是的,这是一个我闻到过的例子。;-)回答得不错。(即,在去掉
/g
标志之后。)
$str = preg_replace('/\b(\w+),(?=.*\b\1\b)/', '', $str);