小编典典

Go中的“未知转义序列”错误

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 '.'我正在寻找的实际角色?我以为转义可以解决问题,但显然我错了。


阅读 333

收藏
2020-07-02

共1个答案

小编典典

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

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

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

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

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

这些在Go规范的“字符串文字”部分中进行了描述。

2020-07-02