2014-10-30 170 views
2

嗨我必须在一个字符串中搜索两个字符串。 例如如何在一个字符串中搜索两个字符串?

$string = "The quick brown fox jumped over a lazy cat"; 
if($string contains both brown and lazy){ 
    then execute my code 
} 

我试图pregmatch这样,

if(preg_match("/(brown|lazy)/i", $string)){ 
    execute my code 
} 

但是它进入如果如果它们中的一个存在于串中循环。但是我希望它只在两个字符串出现在父字符串中时才输入if条件。我怎样才能做到这一点。

注意:我不想在字符串上循环。 (就像使用strposexplode字符串和foreach分解的阵列上和搜索)

+0

'$ string contains the brown and lazy'这里的关键字是:'和'。 – Shomz 2014-10-30 05:21:47

+0

'$ regex =“/(brown)[^。] *(懒惰)/ i”;'要短得多。 – 2014-10-30 05:24:41

+0

如果你正在寻找一种方法来处理正则表达式,这篇文章解释了如何用正则表达式获得'和'效果:http://stackoverflow.com/questions/469913/regular-expressions-is-there -an-and-operator – Tim 2014-10-30 05:24:44

回答

5

尝试像

if(preg_match("/(brown)/i", $string) && preg_match("/(lazy)/i", $string)){ 
    execute my code 
} 

勇也可以尝试用strpos

if(strpos($string, 'brown') >= 0 && strpos($string, 'lazy') >= 0){ 
    execute my code 
} 
+0

您的strpos示例都是错误的:如果位置为0(字符串的开头),它将永远不会返回TRUE,并且'> 0'将失败。 – Shomz 2014-10-30 05:25:39

+0

对不起,回滚。它会''0' – Gautam3164 2014-10-30 05:25:41

+0

@Shomz是的我也来了解这一点。感谢 – Gautam3164 2014-10-30 05:26:19

3

迟到的回答,如果你希望测试两个词的完全匹配:

$regex= "/\b(brown)\b[^.]*\b(lazy)\b/i"; 

$string = "The quick brown fox jumped over a lazy cat"; 

if(preg_match($regex, $string)) 

{ 
    echo 'True'; 
} else { 
    echo 'False'; 
} 

  • 或者,用$regex = "/(brown)[^.]*(lazy)/i";取代它,如果你不想要测试精确匹配,这是一个更短的方法。
+1

谢谢@Fred -ii-为您的关注:) – 2014-10-30 05:59:22

+1

@BlankHead不客气。我当时正在测试,并在此过程中离开此页面,这解释了我迟到的答案。如果这是你的+1,谢谢:) – 2014-10-30 06:01:07

+0

嘿。请不要提及。 :) – 2014-10-30 06:39:53