面向用户的java正则表达式库

时间:2010-06-15 15:48:50

标签: java pattern-matching glob

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

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

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

想法?

3 个答案:

答案 0 :(得分:0)

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

就像SQL“喜欢”一样,我真的希望向用户公开“喜欢”,他们也希望如此。

答案 1 :(得分:0)

答案 2 :(得分:0)

对于只使用*和?的简单球体?作为特殊字符,应该很容易将它们转换为正则表达式模式,而无需引入一个全新的库。以下代码未经测试但我使用了非常类似的东西将sql“like”表达式翻译为regexes:

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());
}