Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex &引用;未知逃逸序列“;围棋中的错误_Regex_Syntax_Go - Fatal编程技术网

Regex &引用;未知逃逸序列“;围棋中的错误

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

我用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还有另一种选择,在为正则表达式编写字符串文字时非常有用:“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正则表达式)有关。这让我发疯了!非常感谢。