Ich versuche, Knoten in einer Neo4j-Datenbank zu entsprechen. Die Knoten haben eine Eigenschaft namens "name" und ich verwende regulären Ausdruck in Cypher, um dies zu erreichen. Ich möchte nur ganze Wörter zusammenbringen, also sollte "javascript" nicht übereinstimmen, wenn ich die Zeichenkette "java" anbiete. Wenn die übereinstimmende Zeichenfolge aus mehreren Wörtern besteht, d. H. "Java-Skript", werde ich zwei getrennte Abfragen durchführen, eine für "Java" und eine für "Skript". DieseCypher Abfrage mit regulärem Ausdruck
ist das, was ich bisher:
match (n) where n.name =~ '(?i).*\\bMYSTRING\\b.*' return n
Dies funktioniert, aber es funktioniert nicht mit einigen Sonderzeichen wie „+“ oder „#“ arbeiten. So kann ich nicht nach "C++" oder "C#" usw. suchen. Der reguläre Ausdruck im obigen Code verwendet nur \ b für die Wortgrenze. es entkommt auch, damit es richtig funktioniert.
Ich habe versucht, einige Versionen dieses Beitrags: regex to match word boundary beginning with special characters, aber es hat nicht wirklich funktioniert, vielleicht habe ich etwas falsch gemacht.
Wie kann ich das mit Sonderzeichen in Cypher und Neo4j arbeiten lassen?
Dies würde normalerweise funktionieren, aber die \ b Wortgrenze funktioniert nur mit alphanumerischen Zeichen, so dass Eigenschaften wie "C++" (die entweder mit einem Sonderzeichen beginnt oder endet) nicht übereinstimmen. Es würde Eigenschaften wie "C++ C" entsprechen, da es mit einem "C" endet. –
@ Øyvind Aktualisiert. – Taemyr
Das funktionierte, aber es stimmte auch überein, wenn vor oder nach der Zeichenfolge Zeichen vorhanden waren, wie Sie in der aktualisierten Antwort angeben. Gibt es eine Möglichkeit, dass es nur auf ganze Wörter passt? Wäre die aktualisierte Antwort nicht die gleiche wie '(? I). * C \\ + \\ +. *'? –