正则表达式非常简单:
WHERE t.name =~ "(?i).*\\baaaaaaaa\\b.*"
这适用于Neo4j服务器Web控制台。我收到了预期的结果。
当我通过Java使用REST接口时,我不得不将正则表达式更改为:"(?i).*\\\baaaaaaaa\\\b.*"
(添加了反斜杠)。我不明白为什么,但它有效(再次返回预期的结果)。
同样的正则表达式不适用于嵌入式Neo4j:
Caused by: Invalid input '': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't' or Unicode (line 1, column 64)
MATCH ... WHERE t.name =~ "(?i)\ aaaaaaaa\ " ...
^
请注意,\b
未显示在错误日志中(至少在Intellij控制台上)。
更糟糕的是"(?i).*\\baaaaaaaa\\b.*"
在嵌入式服务器和服务器数据库上都被正确解析(至少没有抛出异常)。但是没有返回任何结果。
重要注意事项:
答案 0 :(得分:2)
尝试在所有3种情况下使用参数。然后它应该更加一致。
WHERE t.name =~ {regexp}
params: {regexp: "(?i).*\\baaaaaaaa\\b.*"}
当您在Java中使用JSON与文字字符串时发生的不同转义,以及Cypher解析器因此在工作中有2或3个不同的解析器,每个解析器都有自己对转义的理解。
在普通Java中,afaik是regexp的两个退格。