regex - gorilla Mux 正则表达式

标签 regex go mux gorilla

我正在使用来自 Golang Gorilla Toolkit 的 Mux 包对于我的路线。

考虑以下路线:

m.HandleFunc("/admin/install", installHandler).Methods("GET")
m.HandleFunc("/admin/^((?!install).)*$", adminHandler).Methods("GET")
m.HandleFunc("/admin", adminHandler).Methods("GET")

问题出在中间路由的正则表达式上——它没有被解释,所以路由不会工作!

m.HandleFunc("/admin/{^((?!install).)*$}", adminHandler).Methods("GET")

使用 {} 大括号也不起作用。它只是被忽略,并被视为/admin/

也没有:

m.HandleFunc("/admin/{_dummy:^((?!install).)*$}", adminHandler).Methods("GET")

简而言之,我在这里试图实现的是首先匹配/admin/install 路由,然后我想使用正则表达式从下面的路由中排除那个确切的路由,但它不起作用。

有什么方法可以在 gorilla mux 包中使用正则表达式吗?

最佳答案

实际上可以这样做:

m.HandleFunc(`/{_dummy:admin\/([^install]*).*}`, adminHandler).Methods("GET")

编辑:

作为我对 VonC 上面评论的回答,这里有一个示例 go 应用程序:https://play.golang.org/p/nYWNADK7Sr

在您的本地电脑上运行它。尝试以下路线:

http://localhost:8080/admin/ - (returns "adminHandler")
http://localhost:8080/admin/something - (returns "adminHandler")
http://localhost:8080/admin/install - (returns "installHandler")

是的,VonC 确实解决了特定问题:

"to first match the /admin/install route, and that exact route I then want to exclude from the route below"

但是它并不意味着 “后面没有安装这个词” 是正确的 - 这只是在 re2 语法范围内可能的替代方法。简单地“忽略”或排除单词 install,如果它恰好出现在 url 中。

关于regex - gorilla Mux 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950606/

相关文章:

ruby - 正则表达式模式的正则表达式模式是什么?

Gorilla Mux Use() 函数不工作

regex - linux中目录的半复杂重组

regex - 如何排除 <match> 中的模式以获得流畅的配置?

go - 使用gocql的cassandra查询中的可变参数

sockets - Go http.Get 什么时候重用 tcp 连接?

go - 停止正在运行的 goroutine

json - 向 Golang API 发送请求以发送 JSON 和字符串化 JSON

Gorilla mux 删除或替换现有路由

python - 为什么我的正则表达式也接受字母? ^[0-9\-\+_]