应该如何使用preg_replace()
将字符串从“aabbaacc”替换为“abc”?
目前,我的代码使用 str_split()
then array_unique()
then implode()
。我认为preg_replace()
也可以实现这一点,但我不知道如何。
感谢您的帮助。
似乎对我有用的正则表达式是/(.)(?=.*?\1)/
. 请在此处自行测试:
我还测试了preg_replace('/(.)(?=.*?\1)/', '', 'aaabbbabc')
它返回预期的abc
.
希望这可以帮助 :)
试试这个
$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
这是我得到的最接近的。但是,它基本上是以下内容的副本: 如何删除重复字符并仅在 Perl 中保留唯一字符?
<?php
$string = 'aabbaacc';
$new = preg_replace( '/(.)(?=.*?\1)/i','', $string );
echo $new;
?>
不幸的是,它不会使字符串保持相同的顺序。我不知道这对你是否重要。