模式的PHP正则表达式,但前面没有字符串

模式的PHP正则表达式,但前面没有字符串,php,regex,Php,Regex,我有一个PHP应用程序,需要以任意顺序解析逗号分隔的项目列表。不幸的是,有些关键词重叠: $mylist = 'foo,wind,unwind'; $contains_foo = preg_match('/foo/i', $mylist); $contains_bar = preg_match('/bar/i', $mylist); $contains_unwind = preg_match('/unwind/i', $mylist); $contains_wind = preg_match(

我有一个PHP应用程序,需要以任意顺序解析逗号分隔的项目列表。不幸的是,有些关键词重叠:

$mylist = 'foo,wind,unwind';

$contains_foo = preg_match('/foo/i', $mylist);
$contains_bar = preg_match('/bar/i', $mylist);
$contains_unwind = preg_match('/unwind/i', $mylist);
$contains_wind = preg_match('/wind/i', $mylist); # BUG!
如果“风”不在“un”之前,我如何才能创建一个只与“风”匹配的正则表达式

请注意,我无法匹配
/,wind/
,因为它可能是列表中的第一项

我可能会做
/^wind/| | |/,wind/
,但我更愿意将它放在一个正则表达式中

如果“风”不在“un”之前,我如何才能创建一个只与“风”匹配的正则表达式

您可以使用一个负回溯

$contains_wind = preg_match('/(?<!un)wind/i', $mylist); 
$contains_wind = preg_match('/\bwind\b/i', $mylist);
这里断言
\b
被称为单词边界,只有当它被非单词字符或锚包围时,它才会匹配
wind