0

我正在寻找一个可以执行“简单”模式匹配的库,这是一种可以通过 GUI 向用户公开的模式。

它应该定义一个简单的匹配语法,例如 * 匹配任何字符等。

换句话说,我想做像 sun 实现的逻辑http://openjdk.java.net/projects/nio/javadoc/java/nio/file/PathMatcher.html一样的 glob(globbing) ,但与文件系统无关。

想法?

4

3 回答 3

0

扩展“包含”关系的模式匹配对用户来说总是很困难。用户可能理解的是“*”用于任意数据和“?”的简单用法。对于一个任意字符。

它就像 SQL 的“like”,我真的很想向用户公开“like”,他们也喜欢。

于 2010-06-15T15:58:39.600 回答
0

我想我为这个http://jakarta.apache.org/oro/api/org/apache/oro/text/GlobCompiler.html找到了一个 apache commons 类

于 2010-06-15T16:02:07.487 回答
0

对于仅使用 * 和 ? 作为特殊字符,应该很容易将它们转换为正则表达式模式,而无需引入全新的库。以下代码未经测试,但我使用了非常相似的方法将 sql“like”表达式转换为正则表达式:

public static boolean globMatches(String glob, String target) {
    Pattern p = Pattern.compile("(\\*+)|(\\?)|([^*?]+)");
    Matcher m = p.matcher(glob);
    StringBuilder sb = new StringBuilder();
    while (m.find()) {
        String star = m.group(1);
        String question = m.group(2);
        String text = m.group(3);
        if (star != null) {
            sb.append(".*");
        }
        else if (question != null) {
            sb.append(".");
        }
        else {
            sb.append(Pattern.quote(text));
        }
    }

    return target.matches(sb.toString());
}
于 2010-06-15T20:53:02.930 回答