正则精确匹配问题:如何正确匹配末尾为/content的特定用户路径
修正路径匹配的正则表达式问题
你的问题出在正则里的.*——它会匹配任意字符(包括斜杠/),所以会把中间包含多个子目录的路径也误判为符合要求。要解决这个问题,我们需要限制用户ID部分只能是不包含斜杠的字符,也就是只匹配users后面的一级目录。
修正后的正则表达式
把原来的.*替换成[^/]+:
^/root/m/api/users/[^/]+/content$
[^/]+的意思是:匹配一个或多个非斜杠的字符,这样就只会捕获users和content之间的单一级用户ID目录,不会让中间出现额外的/分隔的子路径。
修正后的Java代码
private boolean isPathAllow(final String urlToBlock) { Matcher matcher = Pattern.compile("^/root/m/api/users/[^/]+/content$").matcher(urlToBlock); return matcher.matches(); }
这样修改后,/root/m/api/users/acme/content会正常匹配,而/root/m/api/users/acme/applications/versions/1.0/content因为中间有额外的/,就会被正确排除。
内容的提问来源于stack exchange,提问作者Shay Zambrovski
相关产品推荐
相关产品推荐

