package org.araqne.log.api;
import java.util.regex.Pattern;
public class WildcardMatcher {
private WildcardMatcher() {
}
public static Pattern buildPattern(String s, boolean caseSensitive) {
boolean cs = caseSensitive;
StringBuilder sb = new StringBuilder();
sb.append("^");
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == ')' || c == '[' || c == ']' || c == '$' || c == '^' || c == '.' || c == '{' || c == '}'
|| c == '|' || c == '\\' || c == '*') {
sb.append('\\');
sb.append(c);
} else {
sb.append(c);
}
}
sb.append("$");
String quoted = sb.toString();
String expanded = quoted.replaceAll("(?<!\\\\\\\\)\\\\\\*", ".*");
boolean wildcard = !expanded.equals(quoted);
expanded = expanded.replaceAll("\\\\\\\\\\\\\\*", "\\\\*");
if (wildcard)
return Pattern.compile(expanded, cs ? 0 : Pattern.CASE_INSENSITIVE);
return null;
}
public static Pattern buildPattern(String s) {
return buildPattern(s, false);
}
}