2011-07-24 57 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

相关问题