正则表达式替换一个或两个字母单词

时间:2011-07-24 22:46:07

标签: php regex

我正在尝试替换字符串中的一个或两个字母。请考虑此正则表达式

$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!

我的目标是从字符串中删除任意一个或两个字符长度的单词。这可以是字母数字或特殊字符。

2 个答案:

答案 0 :(得分:6)

使用lookarounds:

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

当删除单词时,这会留下双重空格。要删除空格,您可以尝试以下内容:

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

答案 1 :(得分:3)

只需使用:

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

输出符合要求:

 dljlj-b2 adl  

所以不要忘记通过否定断言来处理字符串的开头/结尾。