Regex &引用;未知逃逸序列“;围棋中的错误
我用Go编写了以下函数。该函数的思想是向其传递一个字符串,并返回找到的第一个IPv4 IP地址。如果找不到IP地址,则返回空字符串Regex &引用;未知逃逸序列“;围棋中的错误,regex,syntax,go,Regex,Syntax,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(chec
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还有另一种选择,在为正则表达式编写字符串文字时非常有用:“rawstring literal”由`
反勾字符引用。原始字符串文字中没有特殊字符,因此只要模式不包含反勾号,就可以使用此语法而不转义任何内容:
regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
这些在。IPv4地址(准确捕获)中描述
匹配0.0.0.0到255.255.255.255
使用此正则表达式将IP编号与Accuracy匹配
这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])"
很好的正则表达式。谢谢。考虑到正则表达式的复杂性,我可能会选择将字符串转换为整数,并进行检查。一年后,我怀疑自己是否还记得那句话的细节。这种代码以前让我感到痛苦。Go库甚至可能支持这种检查。。。现在,我只是使用依赖于服务器发送的字符串是正确的,只要它是由点(“.”)分隔的4个字节。为了使这更易于阅读,我通常这样做:
numBlock=“(25[0-5]| 2[0-4][0-9]| 1[0-9][0-9]|[1-9]?[0-9])“regexpatern=numBlock+”\.+numBlock+“\.+numBlock+”\.+numBlock+“\.+numBlock+”+numBlock
这是个老问题,但每天人们都会遇到正则表达式的问题。在使用正则表达式(无论使用何种语言)时,一件非常有用的事情是打印正则表达式模式,以验证它是否真的是您所认为的。这个问题也与普罗米修斯(promql正则表达式)有关。这让我发疯了!非常感谢。