Update Route matches

Reduced code. Fixed uppercase for params (controller, category).
Doesn't this also require an else block with `ucfirst`? This replacement seems to be duplicate for directory and controller, could you extract a method?

I think this doesn't actually change behaviour, just saves some operations if there's no `_` in the param value? Might be even clearer/more efficient to do something like:

```php
$param = preg_replace_callback(
    '/(^|_)\w/', 
    function($matches){return strtoupper($matches[0]);},
   $param
);
```

Perhaps worth benchmarking?