public static function normalize($input)
    {
        $input = strtolower(preg_replace_callback(
            '@([a-z0-9])(_|\\\\)?([A-Z])@',
            function ($match) {
                return $match[1].'_'.strtolower($match[3]);
            },
            $input
        ));
        return trim(strtolower($input), '_');
    }