[英]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.