gpt4 book ai didi

java - 整个单词正则表达式在 Neo4j Embedded 中不起作用

转载 作者:行者123 更新时间:2023-11-30 09:08:20 24 4
gpt4 key购买 nike

正则表达式非常简单:

WHERE t.name =~ "(?i).*\\baaaaaaaa\\b.*"

这适用于 Neo4j 服务器 Web 控制台。我收到了预期的结果。

当我通过 Java 使用 REST 接口(interface)时,我必须将正则表达式更改为:"(?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.*" 在嵌入式和服务器数据库上都被正确解析(至少没有抛出异常)。但没有返回任何结果。

重要注意事项:

  • Neo4j 2.0
  • 我正在使用 Spring Data (3.0)

最佳答案

尝试在所有 3 种情况下使用参数。那么它应该更加一致。

WHERE t.name =~ {regexp}


params: {regexp: "(?i).*\\baaaaaaaa\\b.*"}

这是当您在 Java 中使用 JSON 与文字字符串时发生的不同转义,以及 Cypher 解析器,因此 2 或 3 个不同的解析器在工作,每个解析器对转义都有自己的理解。

在普通 Java 中,afaik 是正则表达式的两个退格键。

关于java - 整个单词正则表达式在 Neo4j Embedded 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23589289/

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