src/org/nutz/lang/util/CmdParams.java
public static CmdParams parse(String[] args, String boolChars, String boolRegex) {
        CmdParams params = new CmdParams();
        List<String> list = new ArrayList<String>(args.length);
        params.map = new NutMap();
        if (args.length > 0) {

            // 预编译 boolRegex
            Pattern bool_key = null;
            if (!Strings.isBlank(boolRegex)) {
                bool_key = Pattern.compile(boolRegex);
            }

            // 预编译 boolChars，如果匹配这个正则表达式的参数，将被认为是一个布尔参数
            // 支持 -bish 这样的组合形式
            Pattern bool_char = null;
            if (!Strings.isBlank(boolChars)) {
                bool_char = Pattern.compile("^-([" + boolChars + "]+)$");
            }

            // 参数表 ...
            int i = 0;
            Matcher m;
            for (; i < args.length; i++) {
                String s = args[i];
                // boolChars
                // 是否是布尔值表
                if (null != bool_char) {
                    m = bool_char.matcher(s);
                    if (m.find()) {
                        char[] cs = m.group(m.groupCount()).toCharArray();
                        for (char c : cs) {
                            params.map.put("" + c, true);
                        }
                        continue;
                    }
                }

                // 键值
                m = PARAM_KEY.matcher(s);
                if (m.find()) {
                    String key = m.group(m.groupCount());
                    // 键就是布尔值
                    if (null != bool_key && bool_key.matcher(key).matches()) {
                        params.map.put(key, true);
                    }
                    // 木有后面的值了，那么作为 boolean
                    else if (i >= args.length - 1) {
                        params.map.put(key, true);
                        break;
                    }
                    // 如果有值 ...
                    else {
                        s = args[i + 1];
                        if (s.matches("^-[a-zA-Z_].*$")) {
                            params.map.put(key, true);
                            continue;
                        }
                        params.map.put(key, s);
                        // 跳过下一个值
                        i++;
                    }
                }
                // 嗯，是普通值 ...
                else {
                    list.add(s);
                }
            }
        }
        params.vals = list.toArray(new String[list.size()]);
        return params;
    }
public static CmdParams parse(String[] args, String boolChars, String boolRegex) {
        CmdParams params = new CmdParams();
        List<String> list = new ArrayList<String>(args.length);
        params.map = new NutMap();
        if (args.length > 0) {

            // 预编译 boolRegex
            Pattern bool_key = null;
            if (!Strings.isBlank(boolRegex)) {
                bool_key = Pattern.compile(boolRegex);
            }

            // 预编译 boolChars，如果匹配这个正则表达式的参数，将被认为是一个布尔参数
            // 支持 -bish 这样的组合形式
            Pattern bool_char = null;
            if (!Strings.isBlank(boolChars)) {
                bool_char = Pattern.compile("^-([" + boolChars + "]+)$");
            }

            // 参数表 ...
            int i = 0;
            Matcher m;
            for (; i < args.length; i++) {
                String s = args[i];
                // boolChars
                // 是否是布尔值表
                if (null != bool_char) {
                    m = bool_char.matcher(s);
                    if (m.find()) {
                        char[] cs = m.group(m.groupCount()).toCharArray();
                        for (char c : cs) {
                            params.map.put("" + c, true);
                        }
                        continue;
                    }
                }

                // 键值
                m = PARAM_KEY.matcher(s);
                if (m.find()) {
                    String key = m.group(m.groupCount());
                    // 键就是布尔值
                    if (null != bool_key && bool_key.matcher(key).matches()) {
                        params.map.put(key, true);
                    }
                    // 木有后面的值了，那么作为 boolean
                    else if (i >= args.length - 1) {
                        params.map.put(key, true);
                        break;
                    }
                    // 如果有值 ...
                    else {
                        s = args[i + 1];
                        if (s.matches("^-[a-zA-Z_].*$")) {
                            params.map.put(key, true);
                            continue;
                        }
                        params.map.put(key, s);
                        // 跳过下一个值
                        i++;
                    }
                }
                // 嗯，是普通值 ...
                else {
                    list.add(s);
                }
            }
        }
        params.vals = list.toArray(new String[list.size()]);
        return params;
    }
解析传入的参数表

<pre>
如果参数以 "-" 开头，则所谓名值对的键。
如果后面接着一个 "-" 开头的参数，则认为当前项目是布尔
当然，如果给入的参数 boolChars 或者 boolRegex 匹配上了这个参数，也认为是布尔
</pre>

@param args
参数表

@param boolChars
指明一个键的哪个字符是布尔值。 一个键如果全部内容都是布尔值，则分别记录。否则认为是一个普通键 <br>
你可以直接给一个正则表达式来匹配 boolChar，但是你的正则表达式必须得有 group(1) 表示内容

@param boolRegex
用一个正则表达式来描述哪些键（参数的整体）为布尔值

@return 参数表