我只需要从字符串中取出完整的单词,我的意思是完整的单词=超过 4 个字符的单词。 字符串示例:
"hey hello man are you going to write some code"
我需要返回:
"hello going write some code"
我还需要修剪所有这些单词并将它们放入一个简单的数组中。
可以吗?
您可以使用正则表达式来做到这一点。
preg_replace("/\b\S{1,3}\b/", "", $str);
然后您可以使用
preg_split()
将它们放入数组中。
preg_split("/\s+/", $str);
使用
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
的一大优点是它会考虑标点符号并将其从最终单词列表中丢弃。
根据您的完整要求,如果您也需要未修改的字符串数组,您可以使用
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
首先,将它们放入一个数组中:
$myArr = explode(' ', $myString);
然后,循环遍历并仅将长度为 4 或更大的数组分配给新数组:
$finalArr = array();
foreach ($myArr as $val) {
if (strlen($val) > 3) {
$finalArr[] = $val;
}
}
显然,如果字符串中包含逗号和其他特殊字符,事情会变得更加棘手,但对于基本设计,我认为这会让您朝着正确的方向前进。
$strarray = explode(' ', $str);
$new_str = '';
foreach($strarray as $word){
if(strlen($word) >= 4)
$new_str .= ' '.$word;
}
echo $new_str;
不需要循环,不需要嵌套函数调用,不需要临时数组。只需 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]);
<?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);
?>
您可以使用explode()和array_filter()与trim()+strlen()来实现这一点。尝试一下,如果遇到困难,请发布您的代码。