public function dispatchCandidateRoutes($requestUri) {
        $expUri = explode('/',$requestUri);
        $similaridades = [];

        if (count($this->candidateRoutes) > 1) {
            foreach ($this->candidateRoutes as $n => $rota) {
                $padrao = $rota->getPattern();
                if (preg_match('/\[:options\]/', $padrao)) {
                    unset($this->candidateRoutes[$n]);
                }
            }
        }

        foreach ($this->candidateRoutes as $n => $rota) {
            $padrao = $rota->getPattern();
            if (preg_match('/\[:options\]/', $padrao)) {
                $this->matchedRoute = $rota;
                $this->candidateRoutes = [];
                return;
            }

            $naoVariaveis = $this->getNonVariables($padrao);

            foreach ($naoVariaveis as $i => $valor) {
                if(!isset($similaridades[$n]))
                    $similaridades[$n] = 0;

                if (isset($expUri[$i]) && $expUri[$i] == $valor) {
                    $similaridades[$n] += 1;
                }
            }
        }

        $bigger = max(array_values($similaridades));
        $mostSimilar = array_search($bigger, $similaridades);
        $this->matchedRoute = $this->candidateRoutes[$mostSimilar];
        $this->candidateRoutes = [];
    }