dougu4027 2017-02-28 17:42
浏览 119
已采纳

是否可以使用Go.Regexp匹配除常量字符串以外的所有内容?

I have found many similar questions that do not work with the Go regex syntax.

The string that I am attempting to match against is in the form of anything/anything/somestring. With the pattern \/.*\/.*\/(.*), I will match somestring, but I am trying to match anything except strings that contain somestring.

Most answers propose using something like \/.*\/.*\/((?!somestring).*), however in golang regexp I get: ? The preceding token is not quantifiable.

For clarification: /test/test/MATCH would produce a match while /test/test/somestring would not. Is this possible with the (limited) Go regex syntax?

  • 写回答

2条回答 默认 最新

  • douwen8424 2017-03-02 09:36
    关注

    The anything/anything/somestring should not be expressed as \/.*\/.*\/(.*). The first .* matches up to the last but one / in the string. You need to use a negated character class [^/] (not the / should not be escaped in Go regex).

    Since RE2 that Go uses does not support lookaheads, you need to capture (as JimB mentions in the comments) all three parts you are interested in, and after checking the capture group #1 value, decide what to return:

    package main

    import (
        "fmt"
        "regexp"
    )
    
    func main() {
        s := "anything/anything/somestring"
        r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
        val := r.FindStringSubmatch(s)
        // fmt.Println(val[1]) // -> somestring
        if len(val) > 1 && val[1] != "somestring" { // val has more than 1 element and is not equal to somestring?
            fmt.Println(val[1])      // Use val[1]
        } else {
            fmt.Println("No match")  // Else, report no match
        }
    }
    

    See the Go demo

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示