如何使用preg_replace()
将字符串从'aabbaacc'替换为'abc'?
目前,我的代码使用str_split()
,然后使用array_unique()
,然后使用implode()
。
我认为preg_replace()
也可以实现这一点,但我不知道如何。
感谢您的帮助。
答案 0 :(得分:2)
似乎对我有用的正则表达式是/(.)(?=.*?\1)/
。请在这里亲自测试一下:
我还使用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;
?>
不幸的是,它不会保持字符串的顺序相同。我不知道这对你是否重要。