简化过滤类的正则

This commit is contained in:
redkale
2023-10-15 08:41:54 +08:00
parent 59ccb0fe6a
commit c5acc25dec

View File

@@ -76,6 +76,10 @@ public final class ClassFilter<T> {
this.classLoader = classLoader == null ? Thread.currentThread().getContextClassLoader() : classLoader; this.classLoader = classLoader == null ? Thread.currentThread().getContextClassLoader() : classLoader;
} }
public static ClassFilter create(String includeRegxs, String excludeRegxs) {
return create(null, null, includeRegxs, excludeRegxs, null, null);
}
public static ClassFilter create(RedkaleClassLoader classLoader, Class[] excludeSuperClasses, String includeRegxs, String excludeRegxs, Set<String> includeValues, Set<String> excludeValues) { public static ClassFilter create(RedkaleClassLoader classLoader, Class[] excludeSuperClasses, String includeRegxs, String excludeRegxs, Set<String> includeValues, Set<String> excludeValues) {
ClassFilter filter = new ClassFilter(classLoader, null, null, excludeSuperClasses); ClassFilter filter = new ClassFilter(classLoader, null, null, excludeSuperClasses);
filter.setIncludePatterns(includeRegxs == null ? null : includeRegxs.split(";")); filter.setIncludePatterns(includeRegxs == null ? null : includeRegxs.split(";"));
@@ -309,6 +313,7 @@ public final class ClassFilter<T> {
return true; return true;
} }
} }
return false;
} }
return includePatterns == null; return includePatterns == null;
} }
@@ -341,17 +346,17 @@ public final class ClassFilter<T> {
return rs; return rs;
} }
public static Pattern[] toPattern(String[] regs) { public static Pattern[] toPattern(String[] regxs) {
if (regs == null || regs.length == 0) { if (regxs == null || regxs.length == 0) {
return null; return null;
} }
int i = 0; int i = 0;
Pattern[] rs = new Pattern[regs.length]; Pattern[] rs = new Pattern[regxs.length];
for (String reg : regs) { for (String regx : regxs) {
if (reg == null || reg.trim().isEmpty()) { if (regx == null || regx.trim().isEmpty()) {
continue; continue;
} }
rs[i++] = Pattern.compile(reg.trim()); rs[i++] = Pattern.compile(format(regx.trim()));
} }
if (i == 0) { if (i == 0) {
return null; return null;
@@ -364,6 +369,20 @@ public final class ClassFilter<T> {
return ps; return ps;
} }
//将简化版正则转成标准的正则表达式
// *.platf.* 转成 ^.*\.platf\..*$
// .platf. 转成 ^.*\.platf\..*$
private static String format(String regx) {
String str = regx.replace('.', (char) 8);
if (regx.endsWith("*") || regx.endsWith(".")) {
str = str.substring(0, str.length() - 1) + ".*$";
}
if (regx.startsWith("*") || regx.startsWith(".")) {
str = "^.*" + str.substring(1);
}
return str.replace(new String(new char[]{8}), "\\.");
}
public void setSuperClass(Class superClass) { public void setSuperClass(Class superClass) {
this.superClass = superClass; this.superClass = superClass;
} }