PathMatcher implementation for Ant-style path patterns. Examples are provided below.
Part of this mapping code has been kindly borrowed from Apache Ant.
The mapping matches URLs using the following rules:
 
Some examples:
 
com/t?st.jsp - matches com/test.jsp but also
 com/tast.jsp or com/txst.jspcom/*.jsp - matches all
 .jsp files in the com directorycom/**/test.jsp - matches all
 test.jsp files underneath the com pathorg/springframework/**/*.jsp
 - matches all .jsp files underneath the org/springframework pathorg/**/servlet/bla.jsp - matches org/springframework/servlet/bla.jsp but also
 org/springframework/testing/servlet/bla.jsp and org/servlet/bla.jsp| Modifiers | Name | Description | 
|---|---|---|
| static java.lang.String | DEFAULT_PATH_SEPARATOR | Default path separator: "/" | 
| Type | Name and description | 
|---|---|
| java.lang.String | combine(java.lang.String pattern1, java.lang.String pattern2)Combines two patterns into a new pattern that is returned. | 
| static int | countOccurrencesOf(java.lang.String str, java.lang.String sub)Count the occurrences of the substring in string s. | 
| protected boolean | doMatch(java.lang.String pattern, java.lang.String path, boolean fullMatch, java.util.Map<java.lang.String, java.lang.String> uriTemplateVariables)Actually match the given pathagainst the givenpattern. | 
| java.lang.String | extractPathWithinPattern(java.lang.String pattern, java.lang.String path)Given a pattern and a full path, determine the pattern-mapped part. | 
| java.util.Map<java.lang.String, java.lang.String> | extractUriTemplateVariables(java.lang.String pattern, java.lang.String path) | 
| java.util.Comparator<java.lang.String> | getPatternComparator(java.lang.String path)Given a full path, returns a java.util.Comparator suitable for sorting patterns in order of explicitness. | 
| boolean | isPattern(java.lang.String path) | 
| boolean | match(java.lang.String pattern, java.lang.String path) | 
| boolean | matchStart(java.lang.String pattern, java.lang.String path) | 
| void | setPathSeparator(java.lang.String pathSeparator)Set the path separator to use for pattern parsing. | 
| Methods inherited from class | Name | 
|---|---|
| class java.lang.Object | java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() | 
Default path separator: "/"
Combines two patterns into a new pattern that is returned.
This implementation simply concatenates the two patterns, unless the first pattern
 contains a file extension match (such as *.html. In that case, the second pattern
 should be included in the first, or an IllegalArgumentException is thrown.
 
For example:
| Pattern 1 | Pattern 2 | Result | 
|---|---|---|
| /hotels | null | /hotels | 
| null | /hotels | /hotels | 
| /hotels | /bookings | /hotels/bookings | 
| /hotels | bookings | /hotels/bookings | 
| /hotels/* | /bookings | /hotels/bookings | 
| /hotels/** | /bookings | /hotels/**/bookings | 
| /hotels | {hotel} | /hotels/{hotel} | 
| /hotels/* | {hotel} | /hotels/{hotel} | 
| /hotels/** | {hotel} | /hotels/**/{hotel} | 
| /*.html | /hotels.html | /hotels.html | 
| /*.html | /hotels | /hotels.html | 
| /*.html | /*.txt | IllegalArgumentException | 
pattern1 -  the first patternpattern2 -  the second patternCount the occurrences of the substring in string s.
str -  string to search in. Return 0 if this is null.sub -  string to search for. Return 0 if this is null. Actually match the given path against the given pattern.
     
pattern -  the pattern to match againstpath -  the path String to testfullMatch -  whether a full pattern match is required (else a pattern match
 as far as the given base path goes is sufficient)true if the supplied path matched, false if it didn'tGiven a pattern and a full path, determine the pattern-mapped part.
For example:
/docs/cvs/commit.html' and '/docs/cvs/commit.html -> ''/docs/*' and '/docs/cvs/commit -> 'cvs/commit'/docs/cvs/*.html' and '/docs/cvs/commit.html -> 'commit.html'/docs/**' and '/docs/cvs/commit -> 'cvs/commit'/docs/**\/*.html' and '/docs/cvs/commit.html -> 'cvs/commit.html'/*.html' and '/docs/cvs/commit.html -> 'docs/cvs/commit.html'*.html' and '/docs/cvs/commit.html -> '/docs/cvs/commit.html'*' and '/docs/cvs/commit.html -> '/docs/cvs/commit.html'Assumes that match returns true for 'pattern' and 'path', but
 does not enforce this.
     
Given a full path, returns a java.util.Comparator suitable for sorting patterns in order of explicitness.
The returned Comparator will {
/hotels/new/hotels/{hotel}/hotels/*The full path given as parameter is used to test for exact matches. So when the given path is /hotels/2,
 the pattern /hotels/2 will be sorted before /hotels/1.
path -  the full path to use for comparisonSet the path separator to use for pattern parsing. Default is "/", as in Ant.