2014-01-21 48 views
0
$data = "abcaooobooocooodoooeooofooogoooxyz"; 

我想幹什麼?根據以下內容更換髮生的事件?

我要檢查在$數據變量中的每個字母,如果preceds「'000」然後我用大寫字母相同的字母替換否則除去OOO剛剛返回的信,因爲它是

例如,當我打電話

do_it($data); 

它必須返回以下

abcABCDEFGxyz 

我到目前爲止所做的努力?

function do_it($d) { 
$d = strtolower($d); 
$d = str_replace('aooo','A'); 
$d = str_replace('booo','B'); 
$d = str_replace('cooo','C'); 
$d = str_replace('dooo','D'); 
$d = str_replace('eooo','E'); 
... untill the end of alphabets 
return $d; 
} 

問題

什麼是做到這一點的最簡單的方法?

+0

通過哪種方式ü試過到目前爲止..? – user1844933

+0

最簡單的可能是使用[preg_replace_callback()](http://www.php.net/manual/en/function.preg-replace-callback.php) –

+0

編輯@ user1844933 –

回答

1

正則表達式

preg_replace('/([\w]{1})ooo/e', 'strtoupper("$1")', $data); 
+0

沒關係,我的評論是錯誤的。抱歉。 (原來是:「不能在'preg_replace'中以這種方式執行任意函數。」) – brianmearns

+0

實際上,'e'修飾符就是這樣。它將「eval」應用於更換策略。它給出了正確的答案,但是'eval'不是很好。 – Halcyon

+0

確認,你可以在這裏測試它:http://phptester.net/ – brianmearns

0

使用preg_replace_callback

function replace($string) { 
    return strtoupper(substr($string[0], 0, 1)); 
} 
$text = "abcaooobooocooodoooeooofooogoooxyz"; 
echo preg_replace_callback("/[a-z]ooo/", "replace", $text); 
// abcABCDEFGxyz