private function resolvePage($url, $processing = []) {
        $path = ltrim($url, "/");
        $routes = self::getRoutes($this->getLoops());

        foreach($routes as $route => $pageclass) {
            $regexp = "/^".str_replace("\*", "([^\/]+)", preg_quote($route, "/"))."/";

            if(!preg_match($regexp, $path, $match)) {
                continue;
            }

            $page_parameter = array_slice($match, 1);

            //check if regexp conditions are defined via annotations
            if($page_parameter) {
                $reqs = $this->getLoops()->getService("annotations")->get($pageclass)->find("PageParameter");

                foreach($page_parameter as $parameter) {
                    if($req = array_pop($reqs)) {
                        if($req->regexp) {
                            if(!preg_match($req->regexp, $parameter)) {
                                continue 2;
                            }
                        }

                        if(is_array($req->allow)) {
                            if(!in_array($parameter, $req->allow)) {
                                continue 2;
                            }
                        }

                        if(is_array($req->exclude)) {
                            if(in_array($parameter, $req->exclude)) {
                                continue 2;
                            }
                        }

                        if($req->callback) {
                            if(!call_user_func([$pageclass, $req->callback], $parameter)) {
                                continue 2;
                            }
                        }
                    }
                }
            }

            $parameter = ltrim(substr($path, strlen($match[0])), "/");
            $parameter = strlen($parameter) ? array_values(explode("/", $parameter)) : [];

            yield [ $pageclass, $page_parameter, $parameter ];
        }
    }