通配符转正则表达式
/**
* @param str - a WildCard String, as a file name or sth, format like "A*.*" to match.
* @return - a RegularExpression converted from that WildCard str, format like "^A.*\..*$";
*/
public static String WildCard2RegEx(String str) {
String s = str;
s = s.replace('.', '#');
s = s.replaceAll("#", "\\\\.");
s = s.replace('*', '#');
s = s.replaceAll("#", ".*");
s = s.replace('?', '#');
s = s.replaceAll("#", ".?");
s = "^" + s + "$";
return s;
}
然后就可以用了。
PS:下面有个lambda表达式,与主题无关。
PS2:类似本地文件或者FTP的listFiles,真的应该支持通配符。
只支持正则表达式简直反人类。难道他们都不用ls *.*么。其次类似FTP的返回如果不在服务端过滤名称,有效率问题吧???
for(String inPath : inPathList){
File inDir = new File(inPath);
BaseList = inDir.listFiles(pathname -> {
Pattern pattern = Pattern.compile(WCUtil.WildCard2RegEx("A*.dat"));
return pattern.matcher(pathname.getName()).matches();
});
}

本文介绍了一种将通配符表达式转换为正则表达式的实用方法,通过一个Java函数实现,该函数可以将如A*.*这样的通配符格式转换成^A.*..*$的正则表达式格式,便于在文件搜索等场景中使用。
1112

被折叠的 条评论
为什么被折叠?



