PHP正则表达式:删除少于3个字符的单词

时间:2014-06-28 05:10:26

标签: php regex preg-replace

我正在尝试从字符串中删除少于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);

5 个答案:

答案 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);

<强>参考

Word Boundaries

答案 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] 是可接受的字符/数字范围。