This chapter contains miscellanea information on features, goodies, caveats that does not belong to any paricular area.
Spring.Util.PathMatcher
provides
Ant/NAnt
-like path name matching features.
To do the match, you use the method:
static bool Match(string pattern, string path)
If you want to decide if case is important or not use the method:
static bool Match(string pattern, string path, bool ignoreCase)
To build your pattern, you use the *
,
?
and **
building blocks:
*
: matches any number of non slash
characters;
?
: matches exactly 1 (one) non slash/dot
character;
**
: matches any subdirectory, without
taking care of the depth;
A file name can be matched using the following notation:
foo?bar.*
matches:
fooAbar.txt foo1bar.txt foo_bar.txt foo-bar.txt
does not match:
foo.bar.txt foo/bar.txt foo\bar.txt
The classical all files pattern:
*.*
matches:
foo.db .db foo foo.bar.db foo.db.db db.db.db
does not match:
c:/ c:/foo.db c:/foo c:/.db c:/foo.foo.db //server/foo
A directory name can be matched at any depth level using the following notation:
**/db/**
That pattern matches the following paths:
/db //server/db c:/db c:/spring/app/db/foo.db //Program Files/App/spaced dir/db/foo.db /home/spring/spaced dir/db/v1/foo.db
but does not match these:
c:/spring/app/db-v1/foo.db /home/spring/spaced dir/db-v1/foo.db
You can compose subdirectories to match like this:
**/bin/**/tmp/**
That pattern matches the following paths:
c:/spring/foo/bin/bar/tmp/a c:/spring/foo/bin/tmp/a/b.c
but does not match these:
c:/spring/foo/bin/bar/temp/a c:/tmp/foo/bin/bar/a/b.c
You can use more advanced patterns:
**/.spring-assemblies*/**
matches:
c:/.spring-assemblies c:/.spring-assembliesabcd73xs c:/app/.spring-assembliesabcd73xs c:/app/.spring-assembliesabcd73xs/foo.dll //server/app/.spring-assembliesabcd73xs
does not match:
c:/app/.spring-assemblie
.NET is expected to be a cross-platform development ... platform.
So, PathMatcher
will match taking care of the case of
the pattern and the case of the path. For example:
**/db/**/*.DB
matches:
c:/spring/service/deploy/app/db/foo.DB
but does not match:
c:/spring/service/deploy/app/DB/foo.DB c:spring/service/deploy/app/spaced dir/DB/foo.DB //server/share/service/deploy/app/DB/backup/foo.db
If you do not matter about case, you should explicitly tell the
Pathmatcher
.
Back and forward slashes, in the very same cross-platform spirit, are not important:
spring/foo.bar
matches all the following paths:
c:\spring\foo.bar c:/spring\foo.bar c:/spring/foo.bar /spring/foo.bar \spring\foo.bar