我在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)
}
Run Code Online (Sandbox Code Playgroud)
我得到的编译时错误是
未知逃脱序列:.
我怎么能告诉Go这'.'
是我正在寻找的实际角色?我认为逃避它会做到这一点,但显然我错了.
小智 112
该\
反斜杠没有被正则表达式解析器解释,它被解释的字符串字面英寸 你应该再次逃避反斜杠:
regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
Run Code Online (Sandbox Code Playgroud)
引用"
双引号字符的字符串在Go中称为"解释字符串文字".在大多数语言中,解释的字符串文字就像字符串文字:\
字面上不包括反斜杠字符,它们用于为下一个字符赋予特殊含义.源必须\\
在一行中包含两个反斜杠,以在解析的值中获得单个反斜杠字符.
正如Evan Shaw在评论中指出的那样,Go还有另一种选择,在为正则表达式编写字符串文字时非常有用."原始字符串文字"由`
反引号字符引用.原始字符串文字中没有特殊字符,因此只要您的模式不包含反引号,您就可以使用此语法而不转义任何内容:
regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
Run Code Online (Sandbox Code Playgroud)
Go规范的"字符串文字"部分对此进行了描述.