3

应该如何使用preg_replace()将字符串从“aabbaacc”替换为“abc”?

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

感谢您的帮助。

4

3 回答 3

2

似乎对我有用的正则表达式是/(.)(?=.*?\1)/. 请在此处自行测试:

http://regexpal.com/

我还测试了preg_replace('/(.)(?=.*?\1)/', '', 'aaabbbabc')它返回预期的abc.

希望这可以帮助 :)

于 2013-03-08T14:11:17.823 回答
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
于 2013-03-08T13:59:15.443 回答
0

这是我得到的最接近的。但是,它基本上是以下内容的副本: 如何删除重复字符并仅在 Perl 中保留唯一字符?

<?php
    $string = 'aabbaacc';

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

    echo $new;
?>

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

于 2013-03-08T14:08:26.463 回答