2012-03-12 13 views
0

単語の真中にない正確に同じ文字または同様の文字を単語の中で検索する必要があります。 プログラムはphpにあります。 ありがとうございます。特定の文字で始まる単語をPHPの文字列から抽出する

+3

これまでのところあなたの試行を投稿する必要があります。ありがとう –

+0

私は単語を検索する場合、それはコチェン、コチーンを表示するコックで始まる私はコチーンで始まる正確な単語を必要としたくない –

+0

文中の単語の位置を取得する必要がありますか?または、$ needleで始まる実際の単語を抽出しますか? 「類似」とはどういう意味ですか? –

答えて

1

ただ、絶対一致のための非正規表現のソリューションを実証する:

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (substr($item,0,strlen($needle) == $needle)); 
         } 
         ); 

EDIT

説明:の第2引数と

str_word_count()機能ので、同様1または2は、$ stringにあるすべての単語の配列を返します。それは他の句読点(「コーチン」の後のカンマなど)も考慮に入れているため、スペース上で爆発するよりも優れています。

単語のその配列は、その後、一緒に(ラムダまたは匿名関数として定義される)フィルタコールバックと、array_filter()関数に供給されます。ラムダは、配列引数の各エントリ($ item)に対してtrueまたはfalseを返します。trueの場合、そのエントリは$ matchesに含まれます。偽の場合は、そうではありません。

定義ラムダ関数は、順番に各$項目(配列エントリ)を通過し、また(「使用」句を介して)$針れます。単純に$ item値の最初の文字と針を比較し、一致するかどうかに応じて真または偽を返します。大文字と小文字を区別して比較することに注意してください。大文字と小文字を区別しない場合は、比較の前にsubstr()値と$ needle値の両方に対してstrtoupper()またはstrtolower()を使いたいと思うでしょう。

あなたが「類似」試合を望んでいた場合、あなたは%の年齢の類似性を持つ$アイテムと$針のlevenshtein()またはsimilar_text()値の比較とラムダ関数の比較、(または多分metaphone()機能を置き換えることができます彼らが類似しているとみなされるべきかどうかを特定する。

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really; and "couchey" is pretty cool too'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (levenshtein($item,$needle,1,1,0) == 0); 
         } 
         ); 
+0

私はこれのための説明が必要です。これは役に立つかもしれないと思う、私はそれを受け入れるが、必要説明 –

0

あなたが探している正規表現は\b(NEEDLE\w+)です。

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

if (preg_match('/\b(' . preg_quote($needle, '/') . '\w+)/', $sentence, $match)) { 
    echo $match[1]; 
} 
+0

それは私が完全にあなたの問題の文の記述であなたの漠然とした1つの実行私が開発しようとしていますあなたの進歩のための –

+0

気の毒やや似た単語ではない、あまりにも多くの異なるワードを必要と便利ではありません文の形成 – deceze

+0

感謝をもとに、あなたのニーズに応えることができなかったことを、あなたの応答に感謝 –

関連する問題