2015年3月

php中通配符的实现

该方法摘自Laravel5的Event getWildcardListeners

作用如下:

`item.*` -> `item.new`
         -> `item.edit`
class Str {
    public static function is($pattern, $value)
    {
        if ($pattern == $value) return true;

        $pattern = preg_quote($pattern, '#');
        $pattern = str_replace('\*', '.*', $pattern) . '\z';
        return (bool) preg_match('#^' . $pattern . '#', $value);
    }
}

该功能使用正则实现

  • * 替换成 .* 匹配所有字符
  • \z 这个转义序列从来没用过,查了手册是说不受修正符的影响,其实这边应该和$是一样的

PHP: Escape sequences - Manual