gpt4 book ai didi

regex - mgo 正则表达式不起作用

转载 作者:IT王子 更新时间:2023-10-29 00:40:43 24 4
gpt4 key购买 nike

现在我有一些文档,每个文档都有一个键 path 和值,例如 \A\\B\\A\C\, \A\C\D\, \A\E\, \A\E\F\.

我想找到只有 1 个段的那些。这意味着结果应该是 \A\\B\。我使用正则表达式 /^\\[^\\]*\\$/,它在 MongoDB 终端中运行良好。但是当我尝试将它应用于 Go 程序时它不起作用。

Go 代码:

var nodeList []NodeEntry // NodeEntry would match every field of one document
err = c.Find(bson.M{"path": bson.M{"$regex": bson.RegEx{"^\\[^\\]*\\$", ""}}}).All(&nodeList)
fmt.Println(nodeList)

输出:

[]

太奇怪了,然后我发现任何带有 \\ 的正则表达式都会产生一个空结果。

所以是不是mgo的bug?

(不知道是不是不合适,这个问题我也发到mgo.users mailing list了。)

最佳答案

在 Go 中,反斜杠 (\) 是解释字符串文字的转义字符(使用“...”作为包围)。在您的情况下,您宁愿使用原始字符串文字(使用 `...` 作为附件)。

让我们看一下这段代码:

package main

import "fmt"

func main() {
fmt.Println("^\\[^\\]*\\$")
fmt.Println(`^\\[^\\]*\\$`)
}

结果:

^\[^\]*\$
^\\[^\\]*\\$

可以看到第二个选项就是你想要的正则表达式字符串。因此,要解决您的问题,只需将您的正则表达式字符串括在反引号而不是引号中:

err = c.Find(bson.M{"path": bson.M{"$regex": bson.RegEx{`^\\[^\\]*\\$`, ""}}}).All(&nodeList)

Go 规范引用: http://golang.org/ref/spec#String_literals

关于regex - mgo 正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22994727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com