156

What are the rules for Ant path style patterns.

The Ant site itself is surprisingly uninformative.

Raedwald
  • 46,613
  • 43
  • 151
  • 237
MDK
  • 1,631
  • 3
  • 12
  • 5

5 Answers5

216

Ant-style path patterns matching in :

The mapping matches URLs using the following rules:

  • ? matches one character
  • * matches zero or more characters
  • ** matches zero or more 'directories' in a path
  • {spring:[a-z]+} matches the regexp [a-z]+ as a path variable named "spring"

Some examples:

  • com/t?st.jsp - matches com/test.jsp but also com/tast.jsp or com/txst.jsp
  • com/*.jsp - matches all .jsp files in the com directory
  • com/**/test.jsp - matches all test.jsp files underneath the com path
  • org/springframework/**/*.jsp - matches all .jsp files underneath the org/springframework path
  • org/**/servlet/bla.jsp - matches org/springframework/servlet/bla.jsp but also org/springframework/testing/servlet/bla.jsp and org/servlet/bla.jsp
  • com/{filename:\\w+}.jsp will match com/test.jsp and assign the value test to the filename variable

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html

Community
  • 1
  • 1
user11153
  • 8,536
  • 5
  • 47
  • 50
  • 33
    is there any way to match multiple patterns within one ant expression? like /com/*, /com/**/test.jsp in the same expression? – chrismarx Oct 12 '15 at 14:57
  • This pattern /WEB-INF/tiles-config/*-tiles-definition.xml to take all the files ends with -tiles-definition.xml is not working for me but at the same time /WEB-INF/tiles-config/*.xml works. So is * matches zero or more characters correct? – Khader M A Oct 03 '16 at 12:04
  • the explanation within the `spring-framework-reference` nicely puts it into a context: [https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestmapping-uri-templates](https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestmapping-uri-templates). – Wolfson May 15 '20 at 12:48
  • @chrismarx The comma separated syntax in your example works in Jenkins create-zip-file step which also uses Ant-style pattern to specify its globs. – lfree Aug 24 '21 at 07:26
  • In addition, you can use `{*varname}` to match zero or more directories and assign that to the `varname` variable (though this seems to be specific to Spring) – gardenapple Dec 08 '21 at 16:57
45

I suppose you mean how to use path patterns

If it is about whether to use slashes or backslashes these will be translated to path-separators on the platform used during execution-time.

stacker
  • 68,052
  • 28
  • 140
  • 210
  • 1
    +1. As an addition, here is how to navigating to this part of documentation from the Ant Manual: **[Table of Contents](https://ant.apache.org/manual/) => "Concepts and Types" => [List of Types] left menu section => "Directory-based Tasks" => [Patterns] page section**. – informatik01 Feb 25 '14 at 14:55
13

Most upvoted answer by @user11153 using tables for a more readable format.


The mapping matches URLs using the following rules:

+-----------------+---------------------------------------------------------+
| Wildcard        |            Description                                  |
+-----------------+---------------------------------------------------------+
| ?               | Matches exactly one character.                          |
| *               | Matches zero or more characters.                        |
| **              | Matches zero or more 'directories' in a path            |
| {spring:[a-z]+} | Matches regExp [a-z]+ as a path variable named "spring" |
+-----------------+---------------------------------------------------------+

Some examples:

+------------------------------+--------------------------------------------------------+
| Example                      | Matches:                                               |
+------------------------------+--------------------------------------------------------+
| com/t?st.jsp                 | com/test.jsp but also com/tast.jsp or com/txst.jsp     |
| com/*.jsp                    | All .jsp files in the com directory                    |
| com/**/test.jsp              | All test.jsp files underneath the com path             |
| org/springframework/**/*.jsp | All .jsp files underneath the org/springframework path |
| org/**/servlet/bla.jsp       | org/springframework/servlet/bla.jsp                    |
|                       also:  | org/springframework/testing/servlet/bla.jsp            |
|                       also:  | org/servlet/bla.jsp                                    |
| com/{filename:\\w+}.jsp      | com/test.jsp & assign value test to filename variable  |
+------------------------------+--------------------------------------------------------+
Kostas Minaidis
  • 4,681
  • 3
  • 17
  • 25
8

ANT Style Pattern Matcher

Wildcards

The utility uses three different wildcards.

+----------+-----------------------------------+
| Wildcard |            Description            |
+----------+-----------------------------------+
| *        | Matches zero or more characters.  |
| ?        | Matches exactly one character.    |
| **       | Matches zero or more directories. |
+----------+-----------------------------------+
Sk8erPeter
  • 6,899
  • 9
  • 48
  • 67
A Jakhar
  • 706
  • 7
  • 8
1

As @user11153 mentioned, Spring's AntPathMatcher implements and documents the basics of Ant-style path pattern matching.

In addition, Java 7's nio APIs added some built in support for basic pattern matching via FileSystem.getPathMatcher

romeara
  • 1,426
  • 1
  • 17
  • 26