如何使用preg_replace()
將字符串從'aabbaacc'替換爲'abc'?php正則表達式如何刪除重複的字符並使每個字符在字符串中唯一
目前,我的代碼使用str_split()
,然後array_unique()
,然後implode()
。 我認爲preg_replace()
也可以做到這一點,但我不知道如何。
謝謝你的幫助。
如何使用preg_replace()
將字符串從'aabbaacc'替換爲'abc'?php正則表達式如何刪除重複的字符並使每個字符在字符串中唯一
目前,我的代碼使用str_split()
,然後array_unique()
,然後implode()
。 我認爲preg_replace()
也可以做到這一點,但我不知道如何。
謝謝你的幫助。
一個似乎適用於我的正則表達式是/(.)(?=.*?\1)/
。請測試它自己的位置:
我也有preg_replace('/(.)(?=.*?\1)/', '', 'aaabbbabc')
返回預期abc
進行了測試。
希望這會有所幫助:)
謝謝,它的作品。反向引用和貪婪 – user995789 2013-03-08 14:37:46
是否可以保持字符的顯示順序? 使用提供的正則表達式:'bbbaaacccabc' =>'abc' 如果我想'bac'會怎麼樣? – cooltea 2013-03-08 15:06:29
在這裏找到了我的問題的答案:http://stackoverflow.com/a/2583005/618156 – cooltea 2013-03-08 15:10:38
試試這個
$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
'$ out'應聲明爲數組 – 2013-03-08 14:00:10
@ColinMorelli不需要聲明爲數組,PHP支持此語法 – 2013-03-08 14:03:08
僅僅因爲PHP支持它,並不意味着您應該這樣做。 PHP也支持'eval' – 2013-03-08 14:08:41
這是我得到的最接近的。然而,它基本上副本: 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;
?>
不幸的是,它不保留在字符串中的順序相同。我不知道這對你是否重要。
謝謝,它的工作原理,如果我的問題是重複的,請關閉它。 – user995789 2013-03-08 14:38:29
FWIW,我喜歡你的方法。 – 2013-03-08 13:50:33
可能的複製:http://stackoverflow.com/questions/6723389/remove-repeating-character – 2013-03-08 13:56:43
@NickFury其實,現在我想到了這一點,該正則表達式只會按順序重複複製。如果它們稍後出現在字符串中,則不是。因此,我相信''aabbaacc''會變成'abac'而不是'abc'。 – 2013-03-08 13:58:51