gpt4 book ai didi

regex - 匹配单斜线时的 golang 正则表达式错误

转载 作者:IT王子 更新时间:2023-10-29 01:52:07 24 4
gpt4 key购买 nike

我写了一个模式,它可以在 Python 中运行,但是当我在 Go 1.9.2 中运行时,它会崩溃:

panic: runtime error: invalid memory address or nil pointer dereference

代码如下:

package main

import (
"regexp"
"fmt"
)



func ReHaveSlash(s string) bool {
reSlash, _ := regexp.Compile(`^\/(?!\/)(.*?)`)
a := reSlash.MatchString(s)

return a

}

func ReHaveSlashdouble(s string) bool {
reSlash, _ := regexp.Compile(`^\/\/(.*?)`)
a := reSlash.MatchString(s)

return a

}

func main() {
test_url := "/xmars-assets.qiniu.com/archives/1369"
fmt.Println(ReHaveSlashdouble(test_url))
fmt.Println(ReHaveSlash(test_url))

}

Console 中的结果如下

false
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1095e56]

goroutine 1 [running]:
regexp.(*Regexp).get(0x0, 0x0)
/usr/local/Cellar/go/1.9.2/libexec/src/regexp/regexp.go:211 +0x26
regexp.(*Regexp).doExecute(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10ee1f5, 0x25, 0x0, 0x0, ...)
/usr/local/Cellar/go/1.9.2/libexec/src/regexp/exec.go:420 +0x40
regexp.(*Regexp).doMatch(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10ee1f5, 0x25, 0xc42000a0c0)
/usr/local/Cellar/go/1.9.2/libexec/src/regexp/exec.go:412 +0xc8
regexp.(*Regexp).MatchString(0x0, 0x10ee1f5, 0x25, 0x115f400)
/usr/local/Cellar/go/1.9.2/libexec/src/regexp/regexp.go:435 +0x6c
main.ReHaveSlash(0x10ee1f5, 0x25, 0x1)
/Users/l2017006/Documents/work/check-link/test_re.go:12 +0x58
main.main()
/Users/l2017006/Documents/work/check-link/test_re.go:29 +0xa5

最佳答案

Go 正则表达式不支持环视。您可以在此处使用带有交替组的否定字符类来解决此问题:

package main

import (
"regexp"
"fmt"
)

func ReHaveSlash(s string) bool {
var reSlash = regexp.MustCompile(`^/([^/].*|$)`)
return reSlash.MatchString(s)
}

func ReHaveSlashdouble(s string) bool {
var reSlash = regexp.MustCompile(`^//([^/].*|$)`)
return reSlash.MatchString(s)
}

func main() {
test_url := "/xmars-assets.qiniu.com/archives/1369"
fmt.Println(ReHaveSlashdouble(test_url))
fmt.Println(ReHaveSlash(test_url))
}

参见 Go lang demo

^/([^/].*|$) 模式匹配字符串开头的/,然后匹配除以外的字符>/ 后跟任何 0+ 个字符或字符串结尾。 ^//([^/].*|$) 匹配 // 后跟任何 0+ 个字符或字符串结尾

如果你想确保只匹配同一行的字符串,将 [^/] 替换为 [^/\r\n] since [^/] 也匹配换行符。

关于regex - 匹配单斜线时的 golang 正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49005416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com