2011-07-24 53 views
3

我試圖替換字符串中的一個或兩個字母。請考慮這個正則表達式正則表達式替換一個或兩個字母的單詞

$str = 'I haven\'t got much time to spend!'; 
echo preg_replace('/\b([a-z0-9]{1,2})\b/i','',$str); 

returns: haven' got much time spend! 
expected output: haven't got much time spend! 

我的目標是從字符串中刪除任何一個或兩個字符長度的單詞。這可以是字母數字或特殊字符。

+0

字符串'foo a,bb,bar:cc zz.'那麼期望的結果是什麼? – Qtax

回答

5

使用lookarounds:

preg_replace('/(?<!\S)\S{1,2}(?!\S)/', '', $str) 

本書雖然這留下的話被刪除時,雙空格。也刪除空格,你可以嘗試像:

preg_replace('/\s+\S{1,2}(?!\S)|(?<!\S)\S{1,2}\s+/', '', $str) 
+0

只是注意到:) – Maximus

+1

呃!我們來到了相同的解決方案!我認爲這是最好的,其他的都沒有做到現在 – TMS

3

只需使用:

echo preg_replace('/(?<!\S)\S{1,2}(?!\S)/i', '', 'a dljlj-b2 adl xy zq a'); 

輸出是想:

dljlj-b2 adl 

所以,不要忘記處理開始/結束由否定斷言的字符串。

+0

5分鐘打敗你,並且不需要'/ i' ;-) – Qtax

+0

;-) UR更好:-) – TMS

相關問題