代码之家  ›  专栏  ›  技术社区  ›  Henry Blyth

为什么对于regexp.MustCompile解析错误,go build成功?

  •  -3
  • Henry Blyth  · 技术社区  · 6 年前

    它失败了 go run go test (编译后运行),但不适用于 go build (仅编译)。我会想 MustCompile 与编译相关,而不是运行时。


    package main
    
    import (
        "regexp"
    )
    
    var someInvalidRegex = regexp.MustCompile(`(?!`)
    
    func main() {
        someInvalidRegex.MatchString("foo")
    }
    

    运行时失败:

    $ go run main.go
    panic: regexp: Compile(`(?!`): error parsing regexp: invalid or unsupported Perl syntax: `(?!`
    
    goroutine 1 [running]:
    regexp.MustCompile(0x10b7d19, 0x3, 0xc420022070)
        /usr/local/Cellar/go/1.10.3/libexec/src/regexp/regexp.go:240 +0x171
    exit status 2
    

    编译成功:

    $ go build -o foo
    $ echo $?
    0
    

    运行时再次失败:

    $ ./foo
    panic: regexp: Compile(`(?!`): error parsing regexp: invalid or unsupported Perl syntax: `(?!`
    
    goroutine 1 [running]:
    regexp.MustCompile(0x10b7d19, 0x3, 0xc420022070)
        /usr/local/Cellar/go/1.10.3/libexec/src/regexp/regexp.go:240 +0x171
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   Maxim    6 年前

    编译器不分析正则表达式。它是在运行时完成的。 “MustCompile”函数名的“Compile”部分代表正则表达式的编译。

    推荐文章