我正在寻找一个可以执行“简单”模式匹配的库,这是一种可以通过 GUI 向用户公开的模式。
它应该定义一个简单的匹配语法,例如 * 匹配任何字符等。
换句话说,我想做像 sun 实现的逻辑http://openjdk.java.net/projects/nio/javadoc/java/nio/file/PathMatcher.html一样的 glob(globbing) ,但与文件系统无关。
想法?
我正在寻找一个可以执行“简单”模式匹配的库,这是一种可以通过 GUI 向用户公开的模式。
它应该定义一个简单的匹配语法,例如 * 匹配任何字符等。
换句话说,我想做像 sun 实现的逻辑http://openjdk.java.net/projects/nio/javadoc/java/nio/file/PathMatcher.html一样的 glob(globbing) ,但与文件系统无关。
想法?
扩展“包含”关系的模式匹配对用户来说总是很困难。用户可能理解的是“*”用于任意数据和“?”的简单用法。对于一个任意字符。
它就像 SQL 的“like”,我真的很想向用户公开“like”,他们也喜欢。
对于仅使用 * 和 ? 作为特殊字符,应该很容易将它们转换为正则表达式模式,而无需引入全新的库。以下代码未经测试,但我使用了非常相似的方法将 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());
}