php正则表达式如何删除重复的字符串

时间:2013-03-13 06:11:31

标签: php regex

这是一个很长的字符串,如“abc,adbc,abcf,abc,adbc,abcf”

我想使用正则表达式删除由逗号分隔的重复字符串

以下是我的代码,但结果不是我所期望的。

$a='abc,adbc,abcf,abc,adbc,abcf';
$b=preg_replace('/(,[^,]+,)(?=.*?\1)/',',',','.$a.',');
echo $b;

输出:,ADBC,ABC,ADBC,ABCF,

它应该是:,abc,adbc,abcf,

请指出我的问题。感谢。

4 个答案:

答案 0 :(得分:2)

你可以发这个 -

$a='abc,adbc,abcf,abc,adbc,abcf';

$pieces = explode(",", $a);
$unique_values = array_unique($pieces);
$string = implode(",", $unique_values);

答案 1 :(得分:0)

以下是基于正则表达式解决OP问题的积极前瞻基础尝试。

$arr = array('ball ball code', 'abcabc bde bde', 'awycodeawy');
foreach($arr as $str)
   echo "'$str' => '" . preg_replace('/(\w{2,})(?=.*?\\1)\W*/', '', $str) ."'\n";

输出

'ball ball code' => 'ball code'
'abcabc bde bde' => 'abc bde'
'awycodeawy' => 'codeawy'

正如你可以输入'awycodeawy'一样,它使它成为'codeawy'而不是'awycode'。原因是有可能找到一个可变长度超前的东西,这对于lookbehind是不可能的。

答案 2 :(得分:0)

您也可以尝试

echo implode(",", array_unique(preg_split(",", $yourLongString)));

答案 3 :(得分:0)

试试这个......

$string='abc,adbc,abcf,abc,adbc,abcf';
$exp = explode(",", $string);
$arr = array_unique($exp);
$output=implode(',', $arr);