antpathmatcher遇到* ** ?源码是如何处理的
时间: 2023-07-23 07:34:22 浏览: 50
antpathmatcher中对于*、**、?的处理可以在`org.springframework.util.AntPathMatcher`类中找到。
对于*的处理,可以看到在match方法中使用了一个while循环来一直匹配非路径分隔符的字符,直到遇到下一个路径分隔符或者字符串结束,代码如下:
```
while (pathIndex < pathLen && patternIndex < patternLen) {
char pattChar = pattern.charAt(patternIndex);
if (pattChar == '*') {
break;
}
...
}
```
对于**的处理,可以看到在match方法中使用了一个if-else语句来判断是否遇到了**,如果遇到了,则使用一个递归的方法来处理后面的路径部分。代码如下:
```
if (patternIndex == patternLen) {
return (pathIndex == pathLen);
}
else if ("**".equals(subPattern)) {
if (patternIndex == patternLen - 2) {
return true;
}
for (int i = pathIndex; i < pathLen; i++) {
if (match(patternIndex + 2, i, path, pathIndex, context)) {
return true;
}
}
return false;
}
else {
...
}
```
对于?的处理,可以看到在doMatch方法中直接判断字符是否相等即可,代码如下:
```
else if (patternChar == '?') {
// '?' 表示匹配任意单个字符
pathIndex++;
patternIndex++;
}
```
总之,antpathmatcher中对于*、**、?的处理都是通过特定的逻辑来实现的,从而实现了灵活的匹配功能。