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';
}