Ant风格URL

1 Ant 通配符

Apache Ant 样式的路径有三种通配符匹配方法,利用它们可以组合出多种路径模式:

通配符说明
?匹配任何单字符
*匹配0或者任意数量的字符
**匹配0或者更多的目录

2 匹配路径示例

URL路径说明
/app/*.x匹配(Matches)所有在app路径下的.x文件
/app/p?ttern匹配(Matches) /app/pattern 和 /app/pXttern,但是不包括/app/pttern
/**/example匹配(Matches) /app/example, /app/foo/example, 和 /example
/app/**/dir/file.*匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo/bar/dir/file.pdf, 和 /app/dir/file.java
/**/*.jsp匹配(Matches)任何的.jsp 文件

需要注意的是,路径匹配遵循最长匹配原则(has more characters),例如/app/dir/file.jsp符合/**/*.jsp/app/dir/*.jsp两个路径模式,那么最终就是根据后者来匹配。

3 检测字符串是否为 Ant 风格 URL

3.1 基本规则

序号规则备注
1必须以 /开头该规则的检测已用正则实现
2必须不以 /结尾该规则的检测已用正则实现
3任意两个 /不能相连例如,不允许出现 //abc的形式;该规则的检测已用正则实现
4必须使用 RFC3986 文档规定的符号该规则的检测已用正则实现
5一节中,可以同时出现 *?,但不推荐 * ?连用例如,/*??b等同于 /*b,显然后面的形式更简单
6一节中,可以出现连续出现 [0-n] 个?例如,/a??b,将匹配/a11b,但不匹配/a1b
7一节中,可以出现 [0-n] 个*例如,/*a*b,将匹配/1a2b
8一节中,如果出现了 2 个 *,则该节不推荐存在任何其它字符例如,不推荐出现 /a/**b/b的形式,推荐 /a/**/b的形式,原因见下一规则;该规则的检测在前端中使用 JavaScript 实现
9一节中,连续出现[2,n] 个 * 和其它字符,效果等同于只使用 1 个 *经过试验,连续出现 2 个及以上的 *时的效果等同于只使用 1 个 *,例如/**a/b等同于/*a/b

*RFC3986 介绍:见外部网站:网址URL中特殊字符转义编码 https://blog.csdn.net/p312011150/article/details/78928003

**一节:以 / 开头到下一个 /之前的字符串,如 /abc/defabc为一节,def为一节

3.2 JavaScript 正则检测规则

JS脚本:

 var pattern = /^(\/[A-Za-z0-9*?#._~:@!$&'+,;%=\-\[\]\(\)]+)(\/[A-Za-z0-9*?#._~:@!$&'+,;%=\-\[\]\(\)]+)*$/g
 pattern.test();

4 在 Java 中检测是否匹配 Ant URL

public class AntPathMatcherTest {

	private AntPathMatcher pathMatcher = new AntPathMatcher();

	@Test
	public void test() {
		pathMatcher.setCachePatterns(true);
		pathMatcher.setCaseSensitive(true);
		pathMatcher.setTrimTokens(true);
		pathMatcher.setPathSeparator("/");

		Assert.assertTrue(pathMatcher.match("/*", "/test"));
		Assert.assertTrue(pathMatcher.match("/test*/**/tt", "/test1/t/b/tt"));
		Assert.assertTrue(pathMatcher.match("/*/*", "/test/test"));
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值