php regex如何删除重复的字符并使字符串中的每个字符都是唯一的

时间:2013-03-08 13:48:17

标签: php regex

如何使用preg_replace()将字符串从'aabbaacc'替换为'abc'?

目前,我的代码使用str_split(),然后使用array_unique(),然后使用implode()。 我认为preg_replace()也可以实现这一点,但我不知道如何。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

似乎对我有用的正则表达式是/(.)(?=.*?\1)/。请在这里亲自测试一下:

http://regexpal.com/

我还使用preg_replace('/(.)(?=.*?\1)/', '', 'aaabbbabc')对其进行了测试,返回了预期的abc

希望这会有所帮助:)

答案 1 :(得分:0)

试试这个

$string = 'dbbaabbbaac';

$new = preg_replace_callback( array("/(.)\\1+/"),function($M){print_r($M);return $M[1];}, $string  );
$new = preg_replace_callback( array('/(.)(.?\\1)/i','/(.)(.*?\\1)/i'),function($M){return $M[1].trim($M[2],$M[1]);}, $new  );
echo $new."\n";

输出

dbac

或没有正则表达式

$value="aabbaacc";
for($i=0;$i<strlen($value);$i++){
    $out[$value[$i]]=$value[$i];
}
echo implode("",$out);

输出:

abc

答案 2 :(得分:0)

这是我最接近的。但是,它基本上是一个副本: How do I remove duplicate characters and keep the unique one only in Perl?

<?php
    $string = 'aabbaacc';

    $new = preg_replace( '/(.)(?=.*?\1)/i','', $string  );

    echo $new;
?>

不幸的是,它不会保持字符串的顺序相同。我不知道这对你是否重要。