这是一个长字符串,例如“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,
请指出我的问题。谢谢。
在这里,我分享的是简单的 php 逻辑而不是正则表达式
$a='abc,adbc,abcf,abc,adbc,abcf';
$pieces = explode(",", $a);
$unique_values = array_unique($pieces);
$string = implode(",", $unique_values);
尝试这个....
$string='abc,adbc,abcf,abc,adbc,abcf';
$exp = explode(",", $string);
$arr = array_unique($exp);
$output=implode(',', $arr);
你也可以试试
echo implode(",", array_unique(preg_split(",", $yourLongString)));
这是针对 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”。原因是可以找到可变长度的前瞻,而后瞻是不可能的。