我正在尝试从字符串中删除少于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);
答案 0 :(得分:6)
删除短字
您可以使用:
$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);
<强>参考强>
答案 1 :(得分:5)
您可以使用边界标签:\b
:
将\b[a-z]{1,2}\b
替换为''
答案 2 :(得分:1)
使用此
preg_replace('/(\b.{1,2}\s)/','',$your_string);
答案 3 :(得分:0)
由于某些解决方案在这里工作,他们的语言问题&#34; multichar字符&#34;,例如&#34; ch&#34;。一个简单的爆炸和内爆对我有用。
$maxWordLength = 3;
$string = "my super string";
$exploded = explode(" ", $string);
foreach($exploded as $key => $word) {
if(mb_strlen($word) < $maxWordLength) unset($exploded[$key]);
}
$string = implode(" ", $exploded);
echo $string;
// outputs "super string"
答案 4 :(得分:0)
对我来说,这个 hack 似乎适用于大多数 PHP 版本:
$string2 = preg_replace("/~\b[a-zA-Z0-9]{1,2}\b\~/i", "", trim($string1));
其中 [a-zA-Z0-9]
是可接受的字符/数字范围。