是否可以对多个单词使用带有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";
}
已经尝试过很多东西但是如果找到一个单词,条件总是满足的。
答案 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";
}