Каков наилучший способ поиска текста, чтобы определить, содержит ли оно слово (или слова), которые я ищу? - PullRequest
2 голосов
/ 01 мая 2011

Если бы это было просто поиск одного слова, это было бы легко, но стрелка может быть словом или больше чем слово.

Example
 $text = "Dude,I am going to watch a movie, maybe 2c Rio 3D or Water for Elephants, wanna come over";
 $words_eg1 = array ('rio 3d', 'fast five', 'sould surfer');
 $words_eg2 = array ('rio', 'fast five', 'sould surfer');
 $words_eg3 = array ('Water for Elephants', 'fast five', 'sould surfer');

'
 is_words_in_text ($words_eq1, $text)   / true, 'Rio 3D' matches with 'rio 3d'
 is_words_in_text ($words_eq2, $text)   //true, 'Rio' matches with 'rio'
 is_words_in_text ($words_eq3, $text)   //true, 'Water for Elephants'

Спасибо,

Ответы [ 2 ]

3 голосов
/ 01 мая 2011

В вашем случае stripos(), вероятно, добьется цели:

function is_words_in_text($words, $string)
{
    foreach ((array) $words as $word)
    {
        if (stripos($string, $word) !== false)
        {
            return true;
        }
    }

    return false;
}

Но это будет также соответствовать не словам (как в te в Water), чтобы исправить это, мы можем использовать preg_match():

function is_words_in_text($words, $string)
{
    foreach ((array) $words as $word)
    {
        if (preg_match('~\b' . preg_quote($word, '~') . '\b~i', $string) > 0)
        {
            return true;
        }
    }

    return false;
}

Все поиски выполняются без учета регистра, $words может быть строкой или массивом.

0 голосов
/ 01 мая 2011

Вы можете перебрать элементы $ words_eg1, 2, 3 и остановиться, как только strpos или strstr вернет не ложное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...