我在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]+`)
IPv4地址(准确捕获)
匹配0.0.0.0到255.255.255.255
使用此正则表达式可以准确匹配UP数字。
4个数字中的每一个都存储在捕获组中,因此您可以访问它们以进行进一步处理。
"(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"