您的位置:首页 > 编程语言 > Java开发

Java 用正则表达式来实现 通配符匹配 (支持*, ?)

2007-10-25 13:58 597 查看
    private static boolean wildMatch(String pattern, String str) {
        pattern = toJavaPattern(pattern);
        return java.util.regex.Pattern.matches(pattern, str);
    }

    private static String toJavaPattern(String pattern) {
        String result = "^";
        char metachar[] = { '$', '^', '[', ']', '(', ')', '{', '|', '*', '+', '?', '.', '//' };
        for (int i = 0; i < pattern.length(); i++) {
            char ch = pattern.charAt(i);
            boolean isMeta = false;
            for (int j = 0; j < metachar.length; j++) {
                if (ch == metachar[j]) {
                    result += "/" + ch;
                    isMeta = true;
                    break;
                }
            }
            if (!isMeta) {
                if (ch == '*') {
                    result += ".*";
                } else {
                    result += ch;
                }

            }
        }
        result += "$";
        return result;
    }
    
    public static void main(String[] args) {
          test("*", "toto");
          test("toto.java", "tutu.java");
          test("12345", "1234");
          test("1234", "12345");
          test("*f", "");
          test("***", "toto");
          test("*.java", "toto.");
          test("*.java", "toto.jav");
          test("*.java", "toto.java");
          test("abc*", "");
          test("a*c", "abbbbbccccc");
          test("abc*xyz", "abcxxxyz");
          test("*xyz", "abcxxxyz");
          test("abc**xyz", "abcxxxyz");
          test("abc**x", "abcxxx");
          test("*a*b*c**x", "aaabcxxx");
          test("abc*x*yz", "abcxxxyz");
          test("abc*x*yz*", "abcxxxyz");
          test("a*b*c*x*yf*z*", "aabbccxxxeeyffz");
          test("a*b*c*x*yf*zze", "aabbccxxxeeyffz");
          test("a*b*c*x*yf*ze", "aabbccxxxeeyffz");
          test("a*b*c*x*yf*ze", "aabbccxxxeeyfze");
          test("*LogServerInterface*.java", "_LogServerInterfaceImpl.java");
          test("abc*xyz", "abcxyxyz");
    }

    private static void test(String pattern, String str) {
        System.out.println(pattern+" " + str + " =>> " + wildMatch(pattern, str));        
    }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息