src/Path.php
protected function processing(): void
    {
        $this->value = \preg_replace_callback(
            '~\<(?<key>' . $this->defaultRegex . '+):(?<value>.+?)>~',
            function (array $matches) {

                if (!empty($this->regex[$matches['key']])) {
                    throw new Runtime(\sprintf(
                        'duplicate in registry key `%s` for path `%s`',
                        $matches['key'],
                        $this->value
                    ));
                }

                if (!empty($matches['value'])) {
                    $this->regex[$matches['key']] = $matches['value'];
                }

                return '<' . $matches['key'] . '>';
            },
            $this->value
        );
    }
protected function processing(): void
    {
        $this->value = \preg_replace_callback(
            '~\<(?<key>' . $this->defaultRegex . '+):(?<value>.+?)>~',
            function (array $matches) {

                if (!empty($this->regex[$matches['key']])) {
                    throw new Runtime(\sprintf(
                        'duplicate in registry key `%s` for path `%s`',
                        $matches['key'],
                        $this->value
                    ));
                }

                if (!empty($matches['value'])) {
                    $this->regex[$matches['key']] = $matches['value'];
                }

                return '<' . $matches['key'] . '>';
            },
            $this->value
        );
    }
processing:
path: '/(<lang:\w+>)' -> '/(<lang>)'
re: [] -> ['lang' => '\w+']

if attr exists -> throws