选择语言 :

 Core_Route::_compile

null Core_Route::_compile( )
File: ./core/classes/route.class.php
protected static function _compile($route)
{
    // The URI should be considered literal except for keys and optional parts
    // Escape everything preg_quote would escape except for : ( ) < >
    $regex = preg_replace('#' . Route::REGEX_ESCAPE . '#', '\\\\$0', $route['uri']);

    if (strpos($regex, '(') !== false)
    {
        // Make optional parts of the URI non-capturing and optional
        $regex = str_replace(array('(', ')'), array('(?:', ')?'), $regex);
    }

    // Insert default regex for keys
    $regex = str_replace(array('<', '>'), array('(?P<', '>' . Route::REGEX_SEGMENT . ')'), $regex);

    if (!empty($route['preg']))
    {
        $search = $replace = array();
        foreach ($route['preg'] as $key => $value)
        {
            $search[]  = "<$key>" . Route::REGEX_SEGMENT;
            $replace[] = "<$key>$value";
        }

        // Replace the default regex with the user-specified regex
        $regex = str_replace($search, $replace, $regex);
    }

    return '#^' . $regex . '$#uD';
}