0

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

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

我需要返回:

"hello going write some code"

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

可能吗?

4

8 回答 8

6

您可以使用正则表达式来执行此操作。

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

然后,您可以将它们放入带有preg_split().

preg_split("/\s+/", $str);
于 2012-09-11T12:29:37.327 回答
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
于 2012-09-11T12:30:42.613 回答
6

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

str_word_count($str, 1)

将返回一个单词列表,然后使用超过n字母的单词计数strlen()

与orstr_word_count()等​​其他解决方案相比,使用它的最大优势在于它将考虑标点符号并将其从最终的单词列表中丢弃。preg_matchexplode

于 2012-09-11T12:31:28.310 回答
1

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

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

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

$finalArr = array();

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

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

于 2012-09-11T12:31:09.617 回答
1
$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
   if(strlen($word) >= 4)
      $new_str .= ' '.$word;
}
echo $new_str;

代码输出

于 2012-09-11T12:32:41.983 回答
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]);

看到它工作

于 2012-09-11T12:46:12.663 回答
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);
?>
于 2012-09-11T12:37:29.877 回答
-3

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

于 2012-09-11T12:28:24.720 回答