如果preg_match有多个单词

时间:2015-05-19 04:39:26

标签: php

是否可以对多个单词使用带有preg_match的if语句,如果找到所有单词,则使条件为真?

    $line = "one blah, two blah blah three";

    //not working code

    if (preg_match('[one|two|three]' , $line)) {
        echo "matched all three";
    }
    else{
        echo "didn't match all three";
    }

已经尝试过很多东西但是如果找到一个单词,条件总是满足的。

2 个答案:

答案 0 :(得分:5)

使用正向前瞻:

preg_match("%(?=.*one)(?=.*two)(?=.*three)%", $line)

编辑:说明:如果(?=...)紧跟在"之后,...说"匹配0长度。因此,您可以像这样绘制它(使用稍微不同的原始线来演示无序位):

two blah, one blah blah three
----------=== found!
=== found!
------------------------===== found!

(其中---.*===为搜索词。当每个前瞻匹配时,匹配位置按匹配大小前进 - 但前瞻的匹配大小始终为0,因此它保持在原位(在字符串的开头)并允许下一个前瞻再次搜索相同的空间。

答案 1 :(得分:2)

使用strpos代替检查字符串是否包含单词可能更符合逻辑和效率

$line = "one blah, two blah blah three";

if (strpos($line, "one") !== false &&
    strpos($line, "two") !== false &&
    strpos($line, "three") !== false) {
    echo "matched all three";
}
else
{
    echo "didn't match all three";
}

Example