-1

ホワイトリストに登録された単語のリストがあります:kitchen chair table;

テキストを与えられて、私はそれらのホワイトリストに載っている単語のどれがその中にあるか知りたいです。

これを達成するための良い方法は何でしょうか?つまり、わかりやすく、パフォーマンスが良いということですか?

4

5 に答える 5

2

これを実現するには、単語境界のある正規表現を使用する必要があります。文字列の位置に依存せず、単に依存する場合、「heat」などの単語は「cheat」などの単語内で一致します

$word_list = "kitchen chair table tables";
$words = explode( ' ', $word_list);

$text = 'There is a table in the kitchen';

foreach( $words as $word) {
    if( preg_match( '/\b' . $word . '\b/', $text)) {
        echo "$word is in the text\n";
    }
}

これは以下を出力します:

kitchen is in the text 
table is in the text 

のみが含まれているtable場合、これは一致しないことに注意してください。$texttables

于 2012-06-19T16:57:50.670 に答える
2

あまり明確な質問ではありませんが、次のようなものがうまくいくかもしれません:

$str = "kitchen chair table";
$search = "kitchen bathroom chair";
$arr1 = explode(' ', $str);
$arr2 = explode(' ', $search);
print_r(array_intersect($arr1, $arr2));

出力:

Array
(
    [0] => kitchen
    [1] => chair
)
于 2012-06-19T16:57:10.237 に答える
1

これらの単語が文字列内にどのくらいの頻度で含まれているか、またはそれらの正確な位置を知る必要がありますか? そうでない場合は、「explode(' ', $list)」を使用してリストを配列に変換することをお勧めします。次に、その配列を繰り返し処理し、strpos で検索します。

必要に応じてサンプルコードを提供できます:)

位置とすべての出現が必要な場合は、正規表現を使用する必要があります。

于 2012-06-19T16:57:45.820 に答える
1
//list of words
$myArray = array('kitchen', 'chair', 'table');

foreach($myArray as $word){
    if(stristr($textBody, $word) !== false){
    // word's in there
    }
}
于 2012-06-19T16:55:08.430 に答える
1

PHPの爆発機能を使用して、ワードリストをスペースで爆発させることができます。次に、配列を返します。入力テキストでも同じことが行われます。このようにして、2 つのアレイが作成されます。

その後、両方の配列で共通の単語を返すarray_intersect関数を使用できます。

$array = explode(' ',$wordlist);
$result = array_intersect($array, $inputarray);

$result には、すべての一般的な単語が含まれます。

于 2012-06-19T16:55:25.010 に答える