使用正则表达式在String中的单词数组

时间:2014-09-18 07:51:30

标签: php mysql

我希望在字符串中搜索一些单词,下面是我的代码

$str="Chup Raho Episode 5 by Ary Digital 16th September 2014";

$keywords=array('Ary digital','geo');

echo in_string($keywords,$str,'all');


function in_string($words, $string, $option)
{
if ($option == "all") {
    $isFound = true;
    foreach ($words as $value) {
        $isFound = $isFound && (stripos($string, $value) !== false); // returns boolean false if nothing is found, not 0
        if (!$isFound) break; // if a word wasn't found, there is no need to continue
    }
} else {
    $isFound = false;
    foreach ($words as $value) {
        $isFound = $isFound || (stripos($string, $value) !== false);
        if ($isFound) break; // if a word was found, there is no need to continue
    }
}
return $isFound;
}

这个函数返回true或false,如果word发现它返回1,如果不是则返回0.我需要返回我正在搜索的单词,因为我想在mysql中对这个单词进行另一次搜索。 如果函数找到“Ary digital”,那么它应该返回“ary digital found”。 需要帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您可能想要做这样的事情(未经测试):

preg_match('#(word1|word2|word3)#',$string,$matches);

然后print_r($ matches)查看matches数组的输出并获取你想要的位。从那里你可以返回真/假等。

答案 1 :(得分:0)

只需重写您已有​​的内容即可。而不是返回布尔值将匹配关键字推送到新数组并返回该数组。

function in_string($keywords, $string, $searchAll = true) {
    $matches = array();
    foreach ($keywords as $keyword) {
        if (stripos($string, $keyword) !== false)
            array_push($matches, $keyword);
        if (!$searchAll)
            break;
    }
    return $matches;
}

顺便说一下正则表达式比这个慢得多(通常是因子10+)。