我用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 '.'我正在寻找的实际角色?我以为转义可以解决问题,但显然我错了。
'.'
该\反斜杠没有被正则表达式解析器解释,它被解释的字符串常量。您应该再次转义反斜杠:
\
regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
用"双引号引起来的字符串在Go中被称为“解释字符串文字”。解释的字符串文字与大多数语言中的字符串文字相似:\反斜杠字符不按字面意义包含,它们用于赋予下一个字符特殊的含义。源代码必须\\连续包含两个反斜杠,才能在解析的值中获得单个反斜杠字符。
"
\\
Go还有另一种选择,在为正则表达式编写字符串文字时可能会很有用:```反引号字符引用“原始字符串文字” 。原始字符串文字中没有特殊字符,因此,只要您的模式不包含反引号,就可以使用此语法而无需转义任何内容:
regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
这些在Go规范的“字符串文字”部分中进行了描述。