in spectator-api/src/main/java/com/netflix/spectator/impl/matcher/Parser.java [69:109]
private Matcher term() {
List<Matcher> matchers = new ArrayList<>();
while (!isAtEnd() && peek() != ')' && peek() != '|') {
char c = advance();
switch (c) {
case '\\':
matchers.add(escape());
break;
case '^':
matchers.add(StartMatcher.INSTANCE);
break;
case '$':
matchers.add(EndMatcher.INSTANCE);
break;
case '[':
matchers.add(new CharClassMatcher(charClass()));
break;
case '(':
matchers.add(group());
break;
case '{':
matchers.add(repeat(pop(matchers)));
break;
case '.':
matchers.add(AnyMatcher.INSTANCE);
break;
case '?':
case '*':
case '+':
if (matchers.isEmpty()) {
throw error("dangling modifier");
}
matchers.add(meta(pop(matchers)));
break;
default:
matchers.add(new CharSeqMatcher(c));
break;
}
}
return SeqMatcher.create(matchers);
}