Java:在意外情况下进行正则表达式匹配

时间:2012-05-25 18:42:40

标签: java regex servlets

我正在研究一个有效路由到其他servlet的servlet,在此过程中执行一些漂亮的帮助函数。我的web.xml配置为引导通过此类的所有流量,并且该类基于pathInfo和regex逻辑路由请求。我的代码如下所示:

public class API1 extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String pathInfo = req.getPathInfo();

        if (pathInfo.matches("/.*/.*/.*/?")) {
            _fooBarBazHandler.get(req, resp);
        } else if (pathInfo.matches("/.*/.*/?")) {
            _fooBarHandler.get(req, resp);
        } else if (pathInfo.matches("/.*/?")) {
            _fooHandler.get(req, resp);
        } else {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
    }
...
}

现在,我的想法是,如果我点击http://host/FooService/foo/bar/baz它会重定向到_fooBarBazHandlerhttp://host/FooService/foo/bar会点击_fooBarHandlerhttp://host/FooService/foo会点击_fooHandler

但出于某种原因,http://host/FooService/foo显然与_fooBarHandler匹配。为了绝对清楚,使用调试器,我已经确定pathInfo的值是“/ foo”。

我的正则表达不太强烈。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

正则表达式/.*/.*/? 匹配"/foo"。你的错误在其他地方(对不起!)。

http://fiddle.re/0g28(点击蓝色“Java”)

答案 1 :(得分:0)

我已经在我的机器上进行了测试,第三次测试是返回true的 - 所以我同意Andrew Cooke - 这个错误在其他地方。