如何使用PHP检查另一个字符串中是否包含单词?

时间:2009-06-19 17:41:14

标签: php string

伪代码

text = "I go to school";
word = "to"
if ( word.exist(text) ) {
    return true ;
else {
    return false ;
}

我正在寻找一个PHP函数,如果文本中存在单词,则返回true。

11 个答案:

答案 0 :(得分:104)

根据您的需要,您有几个选择。对于这个简单的例子,strpos()可能是最简单,最直接的函数。如果您需要对结果执行某些操作,可能需要strstr()preg_match()。如果你需要使用复杂的模式而不是字符串作为针,你需要preg_match()

$needle = "to";
$haystack = "I go to school";

strpos() and stripos()方法(stripos()不区分大小写):

if (strpos($haystack, $needle) !== false) echo "Found!";

strstr() and stristr() method(stristr不区分大小写):

if (strstr($haystack, $needle)) echo "Found!";

preg_match method(正则表达式,更灵活但运行速度更慢):

if (preg_match("/to/", $haystack)) echo "Found!";

因为你要求一个完整的功能,所以你可以把它放在一起(使用针和干草堆的默认值):

function match_my_string($needle = 'to', $haystack = 'I go to school') {
  if (strpos($haystack, $needle) !== false) return true;
  else return false;
}

答案 1 :(得分:14)

function hasWord($word, $txt) {
    $patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
    return preg_match($patt, $txt);
}

如果$ word为“to”,则匹配:

  • “听我说”
  • “到月球”
  • “向上到一分钟的”

但不是:

  • “一起”
  • “进入太空”

答案 2 :(得分:12)

使用:

return (strpos($text,$word) !== false); //case-sensitive

return (stripos($text,$word) !== false); //case-insensitive

答案 3 :(得分:5)

strpos

<?php
$text = "I go to school";
$word = "to"
$pos = strpos($text, $word);

if ($pos === false) {
    return false;
} else {
    return true;
}
?>

答案 4 :(得分:3)

$text="I go to school";
return (strpos($text, 'to')!== false);

The manual page you need to find the correct usage of strpos

答案 5 :(得分:2)

另一种方式(除了已经给出的strpos示例之外,还使用'strstr'函数:

if (strstr($haystack, $needle)) {
   return true;
} else {
   return false;
}

答案 6 :(得分:1)

您可以使用这些字符串函数

strstr - 查找第一个字符串

stristr - 不区分大小写的strstr()

strrchr - 查找字符串中最后一个字符

strpos - 查找字符串

中第一次出现子字符串的位置

strpbrk - 在字符串中搜索任何一组字符

如果这没有帮助,那么您应该使用preg正则表达式

preg_match - 执行正则表达式匹配

答案 7 :(得分:0)

@mrclay

不能'我们只是做

"/(?:^|\w+)" . preg_quote($word, '/') . "(?:$|\w+)/i"

这样它可以检查开始或空白,结束或空格。

答案 8 :(得分:0)

经过多次搜索以获得合适的php版本后,我决定编写自己的包含函数(带有多个参数针),并且很好记住。

function contains($str,$contain)
{
    if(stripos($contain,"|") !== false)
        {
        $s = preg_split('/[|]+/i',$contain);
        $len = sizeof($s);
        for($i=0;$i < $len;$i++)
            {
            if(stripos($str,$s[$i]) !== false)
                {
                return(true);
                }
            }
        }
    if(stripos($str,$contain) !== false)
        {
        return(true);
        }
  return(false);
}

php的描述包含:

contains($str,$arg)

$str: The string to be searched
$arg: The needle, more arguments divided by '|'

示例:

$str = 'green house';
if(contains($str,"green"))
    echo "we have a green house.";
else
    echo "our house isn't green";

$str = 'green, blue, red houses'; 
if(contains($str,"green|red"))
    echo "we have a green or red house.";
else
    echo "we have a blue house.";

答案 9 :(得分:0)

在php中使用strpos函数。

$text = "I go to school";
$word = "to"
if (strpos($text,$word)) {
    echo 'true';
}

答案 10 :(得分:-2)

str_contains()在PHP 8中

https://wiki.php.net/rfc/str_contains

不到25年之后,他们在PHP中添加了(https://github.com/php/php-src/commit/1668ad7cb17213e67e42994e0c6911e302a3c3c5)一个函数,用于检查另一行中是否包含一行。

str_contains(字符串$干草堆,字符串$针):布尔值

  handleInput = (e) => {
    const key = e.target.name;
    if (!key) { return; }

    const value = e.target.value ? parseFloat(e.target.value) : 0;
    const oldValue = this.state[key] ? this.state[key] : 0;
    const total = (this.state.total - this.state[key]) + value;
    console.log('key: ', key, ' value: ', value, ' total: ', total);

    this.setState({ [key]: value, total })
  }

当然,这只是等效的。 strpos($干草堆,$针)! ==错误 却是一件小事。

作为使用字符串的替代方法,已经有symfony /字符串(https://github.com/symfony/string)或例如voku / Stringy(https://github.com/voku/Stringy/)。