static function compileRoutes() { $result = array(); $resultKeys = array(); foreach (self::$routes as $key => $value) { // strip off any leading /s $key = preg_replace("/^\\/+/i", "", $key); $key = "#^" . preg_quote($key, "#") . "\$#i"; self::$_current_compiled_value = $value; self::$_current_compiled_count = 0; self::$_current_compiled_keys = array(); // lots of escaping since we've already quoted them above $key = preg_replace("#\\\\\\[([^\\]]+)\\\\]#i", "(|\\1)", $key); $key = preg_replace_callback("#\\\\:([a-z0-9]+)#i", function ($matches) { Router::$_current_compiled_count++; // don't try to preg_replace Renderable objects if (!is_object(Router::$_current_compiled_value)) { Router::$_current_compiled_value = str_replace(":" . $matches[1], "\\" . Router::$_current_compiled_count, Router::$_current_compiled_value); } Router::$_current_compiled_keys[$matches[1]] = Router::$_current_compiled_count; return "([^/]+?)"; }, $key); $result[$key] = Router::$_current_compiled_value; $resultKeys[$key] = Router::$_current_compiled_keys; } self::$compiled_routes = $result; self::$compiled_keys = $resultKeys; }