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ます。

最後のオプションの1つは、基本的な方法で実行しexplode、最初のコード例に従って配列を取得するために使用し、次にunset配列からエントリを削除するためにを使用してすべてをループすることです。ただし、その後、インデックスを再作成する必要もあります(「fixed」配列のその後の使用状況によって異なります)。これは、配列の大きさによっては非効率になる可能性があります。

編集:それが機能しないという主張がある理由がわからない、出力については以下を参照してください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

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

str_word_count($str, 1)

単語のリストを返します。次に、nを使用して文字よりも多い単語を数えます。strlen()

またはstr_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 に答える