编辑9.1. 简介
本章内容不属于任何范畴,算是给读者的一些提示和建议。
顶部编辑9.2. PathMatcher
Spring.Util.PathMatcher用于匹配Ant/NAnt风格的路径名:
PathMatcher的静态方法Match可以用来进行匹配,如下:
public static bool Match(string pattern, string path)
如果不考虑大小写,需要用下面的重载:
public static bool Match(string pattern, string path, bool ignoreCase)
顶部
编辑9.2.1.通用规则
可以使用*,?和**创建模式字符串:
- *:匹配任意数量的非斜线字符。
- ?:匹配一个非斜线、非小数点的任意字符。
- **:匹配任意子目录,不考虑子目录的深度。
顶部
编辑9.2.2.匹配文件名
下面的字符串可用于匹配文件名:
foo?bar.*
该字符串可以匹配下面所有的值:
fooAbar.txt
foo1bar.txt
foo_bar.txt
foo-bar.txt
但不能匹配下面的值:
foo.bar.txt
foo/bar.txt
foo\bar.txt
下面是经典的通配符:
*.*
可以匹配以下值:
foo.db
.db
foo
foo.bar.db
foo.db.db
db.db.db
但不匹配以下值::
c:/
c:/foo.db
c:/foo
c:/.db
c:/foo.foo.db
//server/foo
顶部
编辑9.2.3.匹配子目录
下面的字符串可用于匹配任意深度的子目录:
**/db/**
这个字符串可以匹配下面所有的值:
/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
但不能匹配以下值:
c:/spring/app/db-v1/foo.db
/home/spring/spaced dir/db-v1/foo.db
可以用下面的组合来表示子目录的通配符:
**/bin/**/tmp/**
可以匹配以下值:
c:/spring/foo/bin/bar/tmp/a
c:/spring/foo/bin/tmp/a/b.c
但不匹配以下值
c:/spring/foo/bin/bar/temp/a
c:/tmp/foo/bin/bar/a/b.c
也可以用更为复杂的匹配模式:
**/.spring-assemblies*/**
可以匹配:
c:/.spring-assemblies
c:/.spring-assembliesabcd73xs
c:/app/.spring-assembliesabcd73xs
c:/app/.spring-assembliesabcd73xs/foo.dll
//server/app/.spring-assembliesabcd73xs
但不能匹配:
c:/app/.spring-assemblie
顶部
编辑9.2.4. 大小写需要考虑,斜线可以任意
.NET是一个跨平台的开发环境。所以,PathMatcher类在匹配时会考虑模式字符串和路径中的大小写,比如说:
**/db/**/*.DB
可以匹配:
c:/spring/service/deploy/app/db/foo.DB
但不匹配:
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
如果需要用大小写无关的方式匹配,应该显式的对PathMatcher进行相应的设置。(按:使用PathMatcher静态方法Match的一个重载,见API文档)
但是,斜线和反斜线的含义是一样的:
spring/foo.bar
可以匹配下面所有的值:
c:\spring\foo.bar
c:/spring\foo.bar
c:/spring/foo.bar
/spring/foo.bar
\spring\foo.bar
顶部