我正在尝试为几个单词的所有模式匹配测试一个字符串,这些单词是单词的开头。如果并非所有模式都匹配,我想将查询视为False。单词测试的开始是有效的,但是我得到了重复的匹配,我发现令人惊讶的是,一旦找到一个单词的匹配,它就不会再测试该单词了。也许我需要以某种方式将测试限制在一个匹配。
我想象如果我测试3个单词,那么成功的测试将返回3个。
从示例中可以看出,返回值具有误导性。我得到一个正值,它大于我测试的单词数。在非匹配组的情况下,由于某些单词的多个匹配,我仍然得到高于要测试的单词数的值。
我想我还没有完全明白某事或某种程度上我需要强迫一个AND情况。
我已经搜索了答案,但似乎没有一个问题可以解决。
$image = 'After A!!BC DEF hello bugggy bad Sled bob bobert robob Triumph 2000 Roadster clearing bobby Sledmere ^ August 2014 ^ error';
$result = preg_match_all($query, $image, $matches);
$query = '#\b(bob|bug|sled)#i'; // ALL MATCH
Return Value 6 [ bob x 3, bug x 1, sled x 1]
$query = '#\b(bob|bug|led)#i'; // Two matches 'led' fails
Return Value 4 [ bob x 3, bug x 1, led x 0]
答案 0 :(得分:1)
您可以使用多个前瞻:
$text = 'After A!!BC DEF hello bugggy bad Sled bob bobert robob Triumph 2000 Roadster clearing bobby Sledmere ^ August 2014 ^ error';
$pattern = '~(?=.*\bbob)(?=.*\bbug)(?=.*\bsled)~i';
if (preg_match($pattern, $text)) echo 'OK!';
答案 1 :(得分:0)
试试这个
$image = 'After A!!BC DEF hello bugggy bad Sled bob bobert robob Triumph 2000 Roadster clearing bobby Sledmere ^ August 2014 ^ error';
$query = '#\b(bob|bug|sled)(.*?) #i'; // ALL MATC
preg_match_all($query, $image, $matches);
print_r($matches[0]);