PHP检查长单词字符串中的多个单词

时间:2014-09-14 03:49:52

标签: php

使用strpos,我可以在字符串中找到一个单词,但我怎样才能找到很多单词?

我知道当字符串包含用空格分隔的单词时如何操作,但是例如,如果我有array('hi','how','are','you')和字符串$string = 'hihowareyoudoingtoday?' 如何返回找到匹配的总金额?

2 个答案:

答案 0 :(得分:2)

您可以使用返回匹配数的preg_match_all

$words = array('hi','how','are','you');

$nb = preg_match_all('~' . implode('|', $words) . '~', $string, $m);

print_r($m[0]);

echo "\n$nb";

preg_match_all是一个搜索字符串中模式的所有出现的函数。在本示例中,模式为:

~hi|how|are|you~

~只是一个模式分隔符。

|是逻辑OR

请注意,搜索是在字符串中逐个字符地从左到右执行,并且每个备选项都会进行测试,直到匹配为止。因此,在某个位置匹配的第一个单词将存储为匹配结果(进入$m)。 理解这种机制很重要。例如,如果您有字符串baobab和模式~bao|baobab~,则结果将只是bao,因为它是第一个经过测试的替代方案。

换句话说,如果您想先获取最大的单词,则需要按大小对数组进行排序。

答案 1 :(得分:1)

是的,在这种情况下您可以使用strpos()

示例:

$haystack = 'hihowareyoudoingtoday?';
$needles = array('hi','how','are','you');
$matches = 0;
foreach($needles as $needle) { // create a loop, foreach string
    if(strpos($haystack, $needle) !== false) { // use stripos and compare it in the parent string
        $matches++; // if it matches then increment.
    }
}

echo $matches; // 4