2 votes

php regex comment supprimer les chaînes de caractères dupliquées

Voici une longue chaîne comme "abc,adbc,abcf,abc,adbc,abcf"

Je veux utiliser une expression rationnelle pour supprimer les chaînes de caractères en double qui sont séparées par une virgule.

Voici mes codes, mais le résultat n'est pas ce que j'attends.

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

sortie :,adbc,abc,adbc,abcf,

Il devrait être : ,abc,adbc,abcf,

veuillez indiquer mon problème. merci.

3voto

Suresh Kamrushi Points 4371

Ici je partage la logique simple de php au lieu de regex.

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

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

0voto

Raj Adroit Points 886

Voici une tentative de solution basée sur les regex pour résoudre le problème de l'OP.

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

SORTIE

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

Comme vous pouvez le constater, l'entrée 'awycodeawy' est transformée en 'codeawy' au lieu de 'awycode'. La raison en est qu'il est possible de trouver un lookahead de longueur variable, ce qui n'est pas possible pour le lookbehind.

0voto

MatRt Points 2225

Vous pouvez également essayer

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

0voto

Tapas Pal Points 1490

Essayez ceci....

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X