public final String param(String key) {
        if (!checkKey(key)) {
            return null;
        }

        Pattern pattern = Pattern.compile(KEY_BEGIN_PATTERN + key + KEY_END_PATTERN);
        Matcher matcher = pattern.matcher(m_target);

        if (!matcher.find()) {
            return null;
        }

        final int index = matcher.start() + 1;
        final int level = sectionLevel(index);

        Pattern levelPattern = Pattern.compile(DELIMITER_PATTERN);
        Matcher levelMatcher = levelPattern.matcher(m_path);

        int count = 0;
        int begin;
        while (levelMatcher.find()) {
            ++count;
            if (count == level) {
                begin = levelMatcher.end();

                if (levelMatcher.find()) {
                    return m_path.substring(begin, levelMatcher.end() - 1);
                } else {
                    return m_path.substring(begin);
                }
            }
        }

        return null;
    }