Golang使用正则下反引号,双引号引发的问题

Golang的正则匹配中反引号``和转义字符是不能共存的:

package main

import (
    "fmt"
    "regexp"
)

func check(pattern string) {
    src := "abc123一二三①②③"
    fmt.Println(src)
    reg := regexp.MustCompile(pattern)
    fmt.Println(src)
    dst := reg.ReplaceAllString(src, "*")
    fmt.Println(dst)
}

func main() {
    pattern := `[a-zA-Z0-9\u2460-\u24FF]`
    check(pattern)
}

执行上面的代码会报错

panic: regexp: Compile(`[a-zA-Z0-9\u2460-\u24FF]`): error parsing regexp: invalid escape sequence: `\u`

这时我们只需要将反引号修改为双引号便可以解决此问题

package main

import (
    "fmt"
    "regexp"
)

func check(pattern string) {
    src := "abc123一二三①②③"

    reg := regexp.MustCompile(pattern)
    fmt.Println(src)
    dst := reg.ReplaceAllString(src, "*")
    fmt.Println(dst)
}

func main() {
    pattern := "[a-zA-Z0-9\u2460-\u24FF]"
    check(pattern)
}

执行结果

abc123一二三①②③
******一二三***

还有另外一种解决方案如下:

package main

import (
    "fmt"
    "regexp"
    "strconv"
)

func check(pattern string) {
    pattern, _ = strconv.Unquote(`"` + pattern + `"`)
    src := "abc123一二三①②③"

    reg := regexp.MustCompile(pattern)
    fmt.Println(src)
    dst := reg.ReplaceAllString(src, "*")
    fmt.Println(dst)
}

func main() {
    pattern := `[a-zA-Z0-9\u2460-\u24FF]`
    check(pattern)
}

执行结果

abc123一二三①②③
******一二三***

所以说我们使用golang的正则时,尽量全部用双引号。

你可能感兴趣的:(golang)