如何维护对多个已编译正则表达式的引用

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


似乎当我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"))

}


隔江千里
浏览 175回答 1
1回答

动漫人物

我怀疑您想要以下代码。使用正则表达式锚来防止第一个匹配太多。还要在全局范围内使用 MustCompile,否则如果您在函数中使用 Compile,它将运行每个函数调用。无论如何,您都忽略了错误返回值。https://play.golang.org/p/tj3J_PSXNu1package mainimport (    "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"))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go