Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
preg_替换php以替换重复字符_Php_Regex - Fatal编程技术网

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);