繁体   English   中英

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

[英]PHP checking multiple words in a long one word string

使用strpos,我可以在一个字符串中找到一个单词,但是如何找到很多单词?

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

您可以使用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~

~只是一个模式定界符。

| 是逻辑或

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

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

是的,在这种情况下,您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM