-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGlob.java
More file actions
84 lines (76 loc) · 1.73 KB
/
Glob.java
File metadata and controls
84 lines (76 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Glob {
private static final Logger log = Logger.getLogger(Glob.class.getName());
private String globString;
private Pattern pattern;
static {
ConsoleHandler h = new ConsoleHandler();
h.setLevel(Level.ALL);
h.setFormatter(new SimpleFormatter());
}
private Glob(String glob, Pattern pattern) {
globString = glob;
this.pattern = pattern;
}
private static String createRegexFromGlob(String glob) {
String result = "";
int brackets = 0;
for (int i = 0; i < glob.length(); ++i) {
final char character = glob.charAt(i);
switch (character) {
case '*':
if (glob.charAt(i + 1) == '*') {
result += ".*";
++i;
break;
}
else {
result += "\\w*";
break;
}
case '?':
result += '.';
break;
case '{': {
brackets++;
result += '(';
break;
}
case '}': {
--brackets;
result += ')';
break;
}
case ',':
if (brackets > 0) {
result += '|';
}
else {
result += ',';
}
break;
default:
result += character;
}
}
log.log(Level.INFO, "globe RegEx:" + result);
return result;
}
@Override
public String toString() {
return globString;
}
public boolean matches(String path) {
Matcher m = pattern.matcher(path);
return m.matches();
}
public static Glob compile(String glob) {
log.log(Level.INFO, "Creating Glob from string:" + glob);
return new Glob(glob, Pattern.compile(createRegexFromGlob(glob)));
}
}