用于模式的PHP正则表达式,但不带有一些字符串

时间:2014-12-18 10:40:39

标签: 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('/wind/i', $mylist); # BUG!

如果没有'un'之前我怎么能制作一个只匹配'wind'的正则表达式呢?

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

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

1 个答案:

答案 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