登录
首页 >  Golang >  Go问答

管理多个已编译正则表达式的引用

来源:stackoverflow

时间:2024-02-25 16:00:27 279浏览 收藏

大家好,我们又见面了啊~本文《管理多个已编译正则表达式的引用》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我想预编译多个正则表达式并将引用存储在变量中,但我遇到了问题。

似乎当我第二次调用 regexp.compile() 方法时,我没有得到新的引用。它指向第一点。

在下面的示例中,只有 r2 应该返回“true”。每次调用 regexp.compile() 时如何获得唯一的引用?

https://play.golang.org/p/kjjbytszddj

package main

import (
    "fmt"
    "regexp"
)

func main() {

    r1, _ := regexp.Compile(`(/api)(/v\d+)/devices`)
    r2, _ := regexp.Compile(`(/api)(/v\d+)/devices/\w+`)
    
    fmt.Println(r1.MatchString("/api/v1/devices/1"))
    fmt.Println(r2.MatchString("/api/v1/devices/1"))
}

解决方案


我怀疑您想要以下代码。使用正则表达式锚点来防止第一个锚点匹配太多。还要在全局范围内使用 mustcompile,否则如果您在函数中使用 compile,它将运行每个函数调用。无论如何,您都忽略了错误返回值。

https://play.golang.org/p/tj3J_PSXNu1

package main

import (
    "fmt"
    "regexp"
)

var r1 = regexp.MustCompile(`^(/api)(/v\d+)/devices$`)
var r2 = regexp.MustCompile(`^(/api)(/v\d+)/devices/\w+$`)

func main() {
    fmt.Println(r1.MatchString("/api/v1/devices/1"))
    fmt.Println(r2.MatchString("/api/v1/devices/1"))
}

今天关于《管理多个已编译正则表达式的引用》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>