Spring.NET miscellanea
Introduction
This chapter contains miscellanea information on features, goodies,
caveats that does not belong to any paricular area.
PathMatcher
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)
General rules
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;
Matching filenames
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
Matching subdirectories
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
Case does matter, slashes don't
.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