小编典典

Go中的“Unknown escape sequence”错误

go

我有以下用 Go 编写的函数。这个想法是函数有一个字符串传递给它并返回找到的第一个 IPv4 IP 地址。如果未找到 IP 地址,则返回空字符串。

func parseIp(checkIpBody string) string {
    reg, err := regexp.Compile("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
    if err == nil {
        return ""
    }   
    return reg.FindString(checkIpBody)
}

我得到的编译时错误是

未知的转义序列:.

我如何告诉 Go'.'是我正在寻找的实际角色?我认为逃避它会成功,但显然我错了。


阅读 1456

收藏
2021-12-15

共1个答案

小编典典

\反斜杠没有被正则表达式解析器解释,它被解释的字符串常量。您应该再次转义反斜杠:

regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")

"双引号字符引用的字符串在 Go 中称为“解释的字符串文字”。解释的字符串字面量类似于大多数语言中的字符串字面量:\反斜杠字符不按字面包含,它们用于为下一个字符赋予特殊含义。源必须\\在一行中包含两个反斜杠才能在解析的值中获得一个反斜杠字符。

Go 有另一种替代方法,在为正则表达式编写字符串文字时很有用:“原始字符串文字”由```反引号字符引用。原始字符串文字中没有特殊字符,因此只要您的模式不包含反引号,您就可以使用此语法而无需转义任何内容:

regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
2021-12-15