我正在尝试从字符串中删除所有少于 3 个字符的单词,特别是使用 RegEx。
以下不起作用,因为它正在寻找双空格。我想我可以事先将所有空格转换为双空格,然后再将它们转换回来,但这似乎效率不高。有什么想法吗?
$text='an of and then some an ee halved or or whenever';
$text=preg_replace('@ [a-z]{1,2} @',' ',' '.$text.' ');
echo trim($text);
最佳答案
删除短词
你可以使用这个:
$replaced = preg_replace('~\b[a-z]{1,2}\b\~', '', $yourstring);
在the demo ,请参阅底部的替换。
解释
\b
是一个单词边界,匹配一侧是字母而另一侧不是字母的位置(例如空格字符,或字符串的开头)[a-z]{1,2}
匹配一个或两个字母\b
另一个词边界- 替换为空字符串。
选项 2:同时删除尾随空格
如果你还想去除单词后面的空格,我们可以在正则表达式的末尾添加\s*
:
$replaced = preg_replace('~\b[a-z]{1,2}\b\s*~', '', $yourstring);
引用
关于PHP 正则表达式 : Remove words less than 3 characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463814/