查找字符串中是否存在子字符串

6

我有很多字符串,需要检查每个字符串是否包含颜色。

例如:

  • 天空中的鸟
  • 法国22街道
  • 这只狗是蓝色的
  • 这只猫是黑白相间的

因此,最后两个字符串必须返回true。

使用正则表达式还是任何substr()进行检查?哪一种方法更好?

4个回答

27

我经常使用 strpos,因为它似乎是最快的选择(不过我不知道正则表达式怎么样)。

if(strpos($haystack, $needle) !== FALSE) return $haystack;

我找到了一个使用strpos函数和$needles数组的函数。 - bahamut100
3
strpos函数不会返回TRUE,但会返回FALSE,因此您可以这样使用:if(strpos($haystack, $needle) !== FALSE) return $haystack; 另外需要记住的一件事是,如果您正在寻找"red",则"fred"也将返回结果。 - pathfinder
@pathfinder 你说得完全正确,看来我没有注意到 :) 谢谢你指出来。 - Quasdunk
2
这比正则表达式更快。另外要注意,如果strpos是区分大小写的。如果您需要搜索子字符串而不考虑大小写,则应使用stripos - Luís Cruz

8
在正则表达式中,你可以写成这样:
preg_match_all("/(red|blue|black|white|etc)/", $haystack, $matches);

print_r($matches);

使用循环遍历所有字符串,您将很容易地注意到您需要的$matches值。

3
如果您使用strpos函数,它将返回字符串的位置,而不是true或false。它会返回一个数字1、2、3等等。另一个问题是,如果字符串存在于开头,它将返回0,这被视为false,因此strpos找不到该单词。

2
只需使用 === 运算符。 - rluks

1

在 PHP 中,strpos 或 strripos 应该能够在字符串中搜索单个单词。但是,如果要使用它来搜索所有颜色,则可能需要循环。


我还在某处看到过有关eregi的示例: eregi("(this|that)", $str) // 在 $str 中查找 this 或 that - Tommy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接