我用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]+")

"个双引号字符引起来的字符串在围棋中称为"interpreted字符串文字".解释的字符串文字类似于大多数语言中的字符串文字:\个反斜杠字符不包括在字面上,它们用于赋予下一个字符特殊含义.源必须在一行中包括\\两个反斜杠,才能在解析值中获得单个反斜杠字符.

Go还有另一种 Select ,在为正则表达式编写字符串文字时可能会很有用:"raw字符串文字"由`个反记号字符引起来.原始字符串文字中没有特殊字符,因此只要您的模式不包括反号,您就可以使用此语法,而不会转义任何内容:

regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)

这些将在the "String literals" section of the Go spec中描述.

Go相关问答推荐

Google OAuth2没有刷新令牌

GetSecretValue,get identity:get credentials:无法刷新缓存的凭据

Golang html/模板&需要错误数量的参数1在模板中使用';调用';获得0&q;

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

在整个SQL事务中将使用上下文作为默认设置吗?

";无效的复制因子;融合Kafka Go客户端

go aws-lambda 与 terraform 中的 exec 格式错误

为什么 Go 对于长度为 100k 的切片使用的内存比长度为 100k 的数组要少?

Go 中如何判断 struct 体是否包含另一个 struct 体?

如何为ANTLR4目标Go调试监听器

如何将任何类型的数据值传递到 Golang 中的 GRPC Protobuf struct ?

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

无法从主域访问子域:无Access-Control-Allow-Origin

golang yaml 马歇尔网址

fmt.Printf() 标志 '0' 不会被字符串忽略

如何修改go gin的默认端口?我的 8080 端口正在使用中

如何将文件上传到 Google Drive,并与使用服务帐户和 Golang 的任何人共享

为什么 0 big.Int 的 .Bytes() 值是空切片?

Grafana/Prometheus 将多个 ip 可视化为查询

是否存在一个Go泛型类型约束,该约束捕获了将类型用作映射中的键的能力?