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

Posted

技术标签:

【中文标题】如何使用 PHP 检查一个单词是不是包含在另一个字符串中?【英文标题】:How can I check if a word is contained in another string using PHP?如何使用 PHP 检查一个单词是否包含在另一个字符串中? 【发布时间】:2010-11-04 09:16:10 【问题描述】:

伪代码

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

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

【问题讨论】:

How to check if a string contains specific words?的可能重复 您可能会发现s($text)->contains($word)s($text)->containsIgnoreCase($word) 很有帮助,如this standalone library 中所示。 【参考方案1】:

您有几个选项,具体取决于您的需要。对于这个简单的示例,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;

PHP 8.0.0 现在包含一个 str_contains 函数,其工作原理如下:

if (str_contains($haystack, $needle)) 
    echo "Found";

【讨论】:

非 php'ers(如我自己)请注意 !== false 中的双等号,因为如果在字符串的开头(字符位置为零)找到匹配项,strpos() 可能会返回 0。 你不能只做return (strpos($haystack, $needle) !== false);吗?结果完全相同,只是代码更简洁【参考方案2】:
function hasWord($word, $txt) 
    $patt = "/(?:^|[^a-zA-Z])" . preg_quote($word, '/') . "(?:$|[^a-zA-Z])/i";
    return preg_match($patt, $txt);

如果 $word 是“to”,这将匹配:

“听我说” “去月球” “最新”

但不是:

“在一起” “进入太空”

【讨论】:

完美的解决方案,当然根据所提出的问题,接受的答案是正确的 完美解决方案,因为 strpos() 即使匹配字符串的一部分而不是整个单词也会返回 true。示例:$haystack="检查那个叉子"; $needle="for";现在在这种情况下,strpos() 将找到匹配项并返回 true。但是 peg_match() 不会在大海捞针中找到 'for' 词,它会返回 0。【参考方案3】:

使用:

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

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

【讨论】:

你倒退了。 stripos 不区分大小写。【参考方案4】:

strpos

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

if ($pos === false) 
    return false;
 else 
    return true;

?>

【讨论】:

【参考方案5】:
$text="I go to school";
return (strpos($text, 'to')!== false);

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

你可以使用这些字符串函数,

strstr — 查找第一次出现的字符串

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

strrchr — 查找字符串中最后一次出现的字符

strpos — 查找字符串中子字符串第一次出现的位置

strpbrk — 在字符串中搜索任意一组字符

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

preg_match — 执行正则表达式匹配

【讨论】:

【参考方案8】:

PHP 8 新函数 str_contains

if (str_contains('Foo Bar Baz', 'Foo')) 
  echo 'Found';

在php中使用strpos函数。

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

【讨论】:

【参考方案9】:

@mrclay

​​>

不能'我们只是这样做

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

以便它检查开始或空白,以及结束或空白。

【讨论】:

以上是关于如何使用 PHP 检查一个单词是不是包含在另一个字符串中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP switch 语句检查字符串是不是包含单词(但也可以包含其他单词)?

如何写一个在另一个下的单词

如何检查URL是否包含某些单词?

如何检查 URL 是不是包含某些单词?

如何检查一个哈希是不是“完全”包含在另一个哈希中?

JavaScript/jQuery - 如何检查字符串是不是包含特定单词