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

また、試すことができます

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」に対してできるように、「awycode」ではなく「codeawy」になります。その理由は、後読みでは不可能な可変長先読みを見つけることができるからです。

于 2013-03-13T06:15:06.753 に答える
0

これを試して....

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