【问题标题】:My (valid?) regex doesn't work in gorilla/mux我的(有效?)正则表达式在 gorilla/mux 中不起作用
【发布时间】:2015-12-24 07:15:58
【问题描述】:

我的代码中有这个正则表达式:

get.HandleFunc("/my/api/user/{userID:^([1-9][0-9]*)$}", app.Handle("user"))

但是当我运行测试时,只返回 404。我也试过这个:

get.HandleFunc("/my/api/user/{userID:\\A([1-9][0-9]*)\\z}", app.Handle("user"))

它与我的旧(但不正确)正则表达式完美配合:

get.HandleFunc("/my/api/user/{userID:[0-9]{1,}}", app.Handle("user"))

我想知道我的新正则表达式有什么问题。我尝试在一些网站上测试它,并在 Go 中使用 regexp 包,它总是有效。据我所知,gorilla/mux 使用 Go 的 regexp 包。有什么想法吗?

我想要的是检测除零以外的正整数。

【问题讨论】:

    标签: regex go gorilla


    【解决方案1】:

    如果你想检测除 0 以外的正整数,你应该使用这个字符类:[1-9]\d*

    这意味着,第一个数字必须介于 1 和 9 之间。其他数字(如果存在,请查看 *)可以是任何整数,包括 0。

    【讨论】:

      【解决方案2】:

      anchors 很可能是这里的问题,您试图在字符串位置的开始/结束处断言。

      我会简单地尝试修改旧的(工作)正则表达式,如下所示:

      get.HandleFunc("/my/api/user/{userID:[1-9][0-9]*}", app.Handle("user"))
      

      【讨论】:

      • 谢谢,它成功了。在 mux 的源代码中,我找到了 pattern.WriteByte('^')pattern.WriteByte('$')。所以这些可能是默认添加的。
      猜你喜欢
      • 2015-05-11
      • 2020-08-19
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      相关资源
      最近更新 更多