Java Neo4j Embedded中的整字正则表达式不起作用
正则表达式非常简单:Java Neo4j Embedded中的整字正则表达式不起作用,java,regex,neo4j,spring-data-neo4j,Java,Regex,Neo4j,Spring Data Neo4j,正则表达式非常简单: WHERE t.name =~ "(?i).*\\baaaaaaaa\\b.*" 这在Neo4j服务器web控制台中工作。我收到了预期的结果 当我通过Java使用REST接口时,我必须将正则表达式更改为:“(?I)。*\\\baaaaaaa\\\b.*”(添加了反斜杠)。我不明白为什么,但它是有效的(再次返回预期结果) 相同的正则表达式不适用于嵌入式Neo4j: Caused by: Invalid input '': expected '\', ''', '"', 'b
WHERE t.name =~ "(?i).*\\baaaaaaaa\\b.*"
这在Neo4j服务器web控制台中工作。我收到了预期的结果
当我通过Java使用REST接口时,我必须将正则表达式更改为:“(?I)。*\\\baaaaaaa\\\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.*\\baaaaaaa\\b.*”在嵌入式数据库和服务器数据库上都被正确解析(至少没有引发异常)。但是没有返回结果
重要考虑:
- Neo4j 2.0
- 我正在使用Spring数据(3.0)
WHERE t.name =~ {regexp}
params: {regexp: "(?i).*\\baaaaaaaa\\b.*"}
在Java中使用JSON与文字字符串以及Cypher解析器时,会发生不同的转义,因此工作时会有2或3个不同的解析器,每个解析器都有自己对转义的理解
在普通Java中,afaik是regexp的两个退格。您在代码中的确切调用是什么?你能提供更多的背景吗?它起作用了。什么是魔法?顺便问一下,知道你是谁:-)你也能帮我做这个吗?