如何使用preg_replace()
来替换从'aabbaacc'到'abc'的字符串?
目前,我的代码使用str_split()
然后array_unique()
然后implode()
。我认为preg_replace()
也可以做到这一点,但我不知道如何做到。
谢谢你的帮助。
似乎适合我的正则表达式是/(.)(?=.*?1)/
。请在这里自己测试:
我还用preg_replace('/(.)(?=.*?1)/', '', 'aaabbbabc')
测试了它,它返回预期的abc
。
希望这对你有帮助
这是我得到的最接近的。然而,它基本上是:如何在Perl中删除重复字符并保留唯一字符?
<?php
$string = 'aabbaacc';
$new = preg_replace( '/(.)(?=.*?1)/i','', $string );
echo $new;
?>
不幸的是,它没有保持字符串的相同顺序。我不知道这对你是否重要
try this
$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
或this with out Regex
$value="aabbaacc";
for($i=0;$i<strlen($value);$i++){
$out[$value[$i]]=$value[$i];
}
echo implode("",$out);
输出:abc