协慌网

登录 贡献 社区

如何检查字符串是否包含特定单词?

考虑:

$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

假设我有上面的代码, if ($a contains 'are') ,编写语句的正确方法if ($a contains 'are')什么?

答案

您可以使用strpos()函数来查找另一个字符串中出现的一个字符串:

$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

注意使用!== false是故意的; strpos()返回针字符串在 haystack 字符串中开始的偏移量,如果未找到针,则返回布尔值false 。由于 0 是有效偏移量而 0 是 “假”,我们不能使用更简单的结构,如!strpos($a, 'are')

您可以使用正则表达式,与其他用户提到的 strpos 相比,它更适合单词匹配,对于诸如票价,关心,凝视等字符串,它也会返回 true。这可以通过使用单词边界在正则表达式中简单地避免。

一个简单的匹配可能看起来像这样:

$a = 'How are you?';

if (preg_match('/\bare\b/',$a))
    echo 'true';

在性能方面,strpos 的速度提高了大约三倍,并且考虑到,当我同时进行一百万次比较时,它需要 1.5 分钟的预匹配,并且需要花费 0.5 秒。

这是一个小实用函数,在这种情况下很有用

// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
    return strpos($haystack, $needle) !== false;
}