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)
}
replaceall()
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的正则时,尽量全部⽤双引号。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论