mgo-regulärer Ausdruck funktioniert nicht
Nun habe ich einige Dokumente, von denen jede einen Schlüssel hat path
und Wert wie \A\
, \B\
, \A\C\
, \A\C\D\
, \A\E\
, \A\E\F\
.
Möchte ich diejenigen, die nur 1 segment. Es bedeutet, das Ergebnis sollte \A\
und \B\
. Ich benutze Regulären Ausdruck /^\\[^\\]*\\$/
, die funktioniert gut in MongoDB terminal. Aber als ich versuchte, um es anzuwenden, Gehen Programme funktioniert es nicht.
Gehen-codes:
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)
Ausgabe:
[]
Es ist so seltsam, und dann fand ich heraus, dass jede Regex mit \\
produzieren würde ein leeres Ergebnis.
Also ist es ein Fehler von mgo?
(Ich weiß nicht, ob es unangemessen ist, aber ich habe auch geschrieben, diese Frage auf die mgo.users-mailing-Liste.)
- Versuchen Sie, mit
\\` or
\\\", wie einige andere Sprachen in dieser Weise, wenn Sie innerhalb von string""
- Tut mir Leid, ist es das editor-problem? Ich weiß wirklich nicht, was du zu sagen versuchst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Gehen, der umgekehrte Schrägstrich (
\
) ist das escape-Zeichen von einem string-literal interpretiert (mit "..." als Beilagen). In deinem Fall, solltest du lieber wollen, verwenden Sie eine raw-string-Literale (mit `...` als Beilagen).Schauen wir uns dieses Stück code:
Ergebnis:
Können Sie sehen, dass es die zweite option ist, dass die regex-string, die Sie wünschen. So, um Ihr problem zu lösen, einfach schließen Sie den regex-string in backticks anstelle von Anführungszeichen:
Gehen spec Referenz: http://golang.org/ref/spec#String_literals
\A\
, und ich will zu findenpath
mit 2 Segmenten, dh\A\C\
und\A\E\
, so dass die regex sollte`^`+variable+`[^\\]*\\$`
, aber eigentlich invariable
es\A\
, nicht\\A\\
, und fügen Sie manuell eine\
im front-und Ende nicht funktioniert. Ich habe versucht ersetzen Sie\
mit\\
, aber es funktioniert immer noch nicht.\
mit\\
. Aber trotzdem ist es ein wenig seltsam, weil das, was ich gespeichert habe in mongodb nicht\\
aber\
, also warum brauche ich\\
um es zu finden?\\
da perl style regex verwendet auch backslash als escape-Zeichen. Also, in regex\\
bedeutetthe character \
in der gleichen Weise, dass\.
bedeutetthe character .
im Gegensatz zu.
was bedeutetany character
.\
ich übergeben müssen\\\\
.\\\\
übersetzt wird\\
in golang, und\\
übersetzt wird\
im regex-Suche-Abfrage.Verwenden Sie einfach diese
Hinzufügen @sandun-priyanka Lösung, wenn Sie wollen, um es groß-und Kleinschreibung: