我有一个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/ || /,wind/
,但更愿意将它放在一个正则表达式中。
答案 0 :(得分:2)
如果没有'un'之前我怎么能制作一个只匹配'wind'的正则表达式呢?
您可以使用负面反对:
$contains_wind = preg_match('/(?<!un)wind/i', $mylist);
此处(?<!un)
是否定后瞻,如果单词wind
前面有un
,则表示匹配失败。
另一方面,在查看您的示例时,您还可以使用字边界:
$contains_wind = preg_match('/\bwind\b/i', $mylist);
此处断言\b
称为字边界,只有当它被非字字符或锚点包围时才匹配wind
。