这是一个很长的字符串,如“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,
请指出我的问题。感谢。
答案 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);