01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: *
17: */
18: package org.apache.ivy.plugins.matcher;
19:
20: import java.util.regex.Pattern;
21: import java.util.regex.PatternSyntaxException;
22:
23: /**
24: * A pattern matcher matching input using regular expressions.
25: *
26: * @see Pattern
27: */
28: public final/* @Immutable */class RegexpPatternMatcher extends
29: AbstractPatternMatcher {
30: public static final RegexpPatternMatcher INSTANCE = new RegexpPatternMatcher();
31:
32: /*
33: * NOTE: Regexp compiler does ~200K compilation/s - If necessary look into using ThreadLocal
34: * Pattern to cut on useless object creation - If expression are reused over and over a LRU
35: * cache could make sense
36: */
37:
38: public RegexpPatternMatcher() {
39: super (REGEXP);
40: }
41:
42: protected Matcher newMatcher(String expression) {
43: return new RegexpMatcher(expression);
44: }
45:
46: private static/* @Immutable */class RegexpMatcher implements
47: Matcher {
48: private Pattern pattern;
49:
50: public RegexpMatcher(String expression)
51: throws PatternSyntaxException {
52: if (expression == null) {
53: throw new NullPointerException();
54: }
55: pattern = Pattern.compile(expression);
56: }
57:
58: public boolean matches(String input) {
59: if (input == null) {
60: throw new NullPointerException();
61: }
62: return pattern.matcher(input).matches();
63: }
64:
65: public boolean isExact() {
66: return false;
67: }
68: }
69: }
|