public ParametricCommand getSubcommand(String value) {
        if (!this.hasExpressionSubcommands)
            return subcommands.get(value.toLowerCase());

        else for (String key : subcommands.keySet()) {
            if ((key.charAt(0) == '^' && value.matches(key.substring(1)))
                || value.equalsIgnoreCase(key))
                return subcommands.get(key);
        }

        return null;
    }