从字符串中删除少于4个字符的单词[关闭]

问题描述 投票:0回答:8

我只需要从字符串中取出完整的单词,我的意思是完整的单词=超过 4 个字符的单词。 字符串示例:

"hey hello man are you going to write some code"

我需要返回:

"hello going write some code"

我还需要修剪所有这些单词并将它们放入一个简单的数组中。

可以吗?

php string filter trim
8个回答
6
投票

您可以使用正则表达式来做到这一点。

preg_replace("/\b\S{1,3}\b/", "", $str);

然后您可以使用

preg_split()
将它们放入数组中。

preg_split("/\s+/", $str);

6
投票

使用

str_word_count()
http://php.net/manual/fr/function.str-word-count.php

str_word_count($str, 1)

将返回一个单词列表,然后使用

n
 计算超过 
strlen()

字母的单词

与其他解决方案(例如

str_word_count()
preg_match
)相比,使用
explode
的一大优点是它会考虑标点符号并将其从最终单词列表中丢弃。


6
投票

根据您的完整要求,如果您也需要未修改的字符串数组,您可以使用

explode
,这样可以将您的单词放入数组中:

$str = "hey hello man are you going to write some code";
$str_arr = explode(' ', $str);

然后您可以使用

array_filter
删除您不想要的单词,如下所示:

function min4char($word) {
    return strlen($word) >= 4;
}
$final_str_array = array_filter($str_arr, 'min4char');

否则,如果您不需要未修改的数组,则可以使用正则表达式使用

preg_match_all
获取超过特定长度的所有匹配项,或者替换使用
preg_replace
的匹配项。

最后一个选择是采用基本方法,使用

explode
按照第一个代码示例获取数组,然后使用
unset
遍历所有内容以从数组中删除条目。但是,您还需要重新索引(取决于您对“固定”数组的后续使用),这可能效率低下,具体取决于您的数组有多大。

编辑:不确定为什么有人声称它不起作用,请参阅下面的输出

var_dump($final_str_array)

array(5) { [1]=> string(5) "hello" [5]=> string(5) "going" [7]=> string(5) "write" [8]=> string(4) "some" [9]=> string(4) "code" } 

@OP,要将其转换回您的字符串,您只需调用

implode(' ', $final_str_array)
即可获取此输出:

hello going write some code

1
投票

首先,将它们放入一个数组中:

$myArr = explode(' ', $myString);

然后,循环遍历并仅将长度为 4 或更大的数组分配给新数组:

$finalArr = array();

foreach ($myArr as $val) {
  if (strlen($val) > 3) {
    $finalArr[] = $val;
  }
}

显然,如果字符串中包含逗号和其他特殊字符,事情会变得更加棘手,但对于基本设计,我认为这会让您朝着正确的方向前进。


1
投票
$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
   if(strlen($word) >= 4)
      $new_str .= ' '.$word;
}
echo $new_str;

代码输出


1
投票

不需要循环,不需要嵌套函数调用,不需要临时数组。只需 1 个函数调用和一个非常简单的正则表达式。

$string = "hey hello man are you going to write some code";
preg_match_all('/\S{4,}/', $string, $matches);

//Printing Values
print_r($matches[0]);

看到它工作了


0
投票
<?php 
$word = "hey hello man are you going to write some code";
$words = explode(' ', $word);
$new_word;
foreach($words as $ws)
{
    if(strlen($ws) > 4)
    {
        $new_word[] = $ws;
    }
}
echo "<pre>"; print_r($new_word);
?>

-3
投票

您可以使用explode()和array_filter()与trim()+strlen()来实现这一点。尝试一下,如果遇到困难,请发布您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.