2

这是一个长字符串,例如“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

4 回答 4

3

在这里,我分享的是简单的 php 逻辑而不是正则表达式

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

$pieces = explode(",", $a);
$unique_values = array_unique($pieces);
$string = implode(",", $unique_values);
于 2013-03-13T06:17:18.707 回答
0

尝试这个....

$string='abc,adbc,abcf,abc,adbc,abcf';
$exp = explode(",", $string);
$arr = array_unique($exp);
$output=implode(',', $arr);
于 2013-03-13T06:22:30.350 回答
0

你也可以试试

echo implode(",", array_unique(preg_split(",", $yourLongString)));
于 2013-03-13T06:18:19.187 回答
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”。原因是可以找到可变长度的前瞻,而后瞻是不可能的。

于 2013-03-13T06:15:06.753 回答