Php preg_匹配这个或这个,但不匹配任何一个

Php preg_匹配这个或这个,但不匹配任何一个,php,regex,expression,preg-match,Php,Regex,Expression,Preg Match,所以,我四处看了一会儿,但我遇到了一些问题 我需要一个preg_match函数,它带有一个正则表达式,可以在字符串中查找单词,只需匹配整个模式,而不需要替换或查找位置 “mct”或“MT”/i(不区分大小写) 但同时,此字符串不能有任何以“md”、“med”、“burn”、“mull”、“des a”、“hot tem”/i开头或包含“md”、“med”、“burn”、“mull”、“des a”、“hot tem”/i的单词(也不区分大小写) 完全不区分大小写 所以我试过这样的方法: /(mt

所以,我四处看了一会儿,但我遇到了一些问题

我需要一个preg_match函数,它带有一个正则表达式,可以在字符串中查找单词,只需匹配整个模式,而不需要替换或查找位置

“mct”或“MT”/i
(不区分大小写)

但同时,此字符串不能有任何以“md”、“med”、“burn”、“mull”、“des a”、“hot tem”/i开头或包含“md”、“med”、“burn”、“mull”、“des a”、“hot tem”/i的单词(也不区分大小写)

完全不区分大小写

所以我试过这样的方法:

/(mt|mct)(?!med)(?!md)(?!burn)(?!mull)(?!des a)(?!hot tem)))*$/i
但它似乎没有按我预期的方式工作

预期行为的示例:

 $string                     |STATUS

McTNug10GdPap               | TRUE 
McTQQMdDobPap               | FALSE (has "Md")
McT Pollo Esp Dobl Gd P     | TRUE
MTD McPollo Spicy Med       | FALSE (has "Med")
MegaBig Chikn Nugg          | FALSE 

将您的匹配更改为两种模式

if(preg_match("/(mc|mct)/",$string) &&
!preg_match("/(md|burn|mull|des a|hot tem)/",$string))

您可以根据需求使用以下正则表达式

/^(?!.*(?:me?d|burn|mull|des a|hot tem)).*mc?t.*$/i

你能给我们一个字符串的例子吗?在问题中,它说必须包含
mct
MT
,但正则表达式有
(mc | mct)
,这就是我可以相应地更新我的答案的原因吗?我只是在检查你的答案,是的,它必须有(“MT”或“mct”不区分大小写)这样或那样,但我不知道“(MT | mct)”这是正确的方法。它寻求匹配“mct”而不是“mt”?完全有效!:)这正是我想要的,谢谢hwn。如果我想在“mt”和“mct”中添加另外两个匹配的单词,那就再问一个问题;“duo”或“fresh”(4个字匹配)我可以用一根管子加上吗?,谢谢你能<代码>(mc?t|duo|fresh)