Regex Neo4j Cypher正则表达式不匹配

Regex Neo4j Cypher正则表达式不匹配,regex,neo4j,cypher,Regex,Neo4j,Cypher,我正在尝试在我的边缘中匹配此属性 目标对象:hklm\\software\\microsoft\\windows\\currentversion\\run\\xyz 为什么这个正则表达式会失败 MATCH (n)-[r]->(m) where r.TargetObject=~'hklm\\\\software\\\\microsoft\\\\windows\\\\currentversion\\\\run.*' return n, r, m 只有以下几项才能起作用 MATCH (n)-[

我正在尝试在我的边缘中匹配此属性

目标对象:hklm\\software\\microsoft\\windows\\currentversion\\run\\xyz

为什么这个正则表达式会失败

MATCH (n)-[r]->(m) where r.TargetObject=~'hklm\\\\software\\\\microsoft\\\\windows\\\\currentversion\\\\run.*' return n, r, m
只有以下几项才能起作用

MATCH (n)-[r]->(m) where r.TargetObject=~'hklm\\\\.*' return n, r, m

唯一的解决方法是使用这个表达式
r.TargetObject=~'hklm\\\\\\\.*s.*”
让我们看看是否可以澄清一下这一点

正则表达式
hklm\\\\s.*
位于字符串对象中,它在创建时将转义
\
,因此保存为
hklm\\s.*
。然后,一旦对正则表达式求值,它将作为一个新的字符串/regex对象处理,该对象也将转义
\
。这意味着您搜索的正则表达式是
hklm\s.*
,它与目标字符串(具有双
\
)不匹配

正则表达式
hklm\\\\.*
将是与目标匹配的
hklm\.*
(因为
匹配任何字符),不同于
hklm\s.

要最终获得正确的正则表达式,您需要在原始查询正则表达式中添加更多的
\
(金额的两倍)。正则表达式
hklm\s.*
在计算时将变为
hklm\\s.*
,应该与您的目标匹配

我用Neo4j浏览器的一个小例子尝试了这一点,然后添加了额外的
\

希望这有帮助,
Therese

Neo4j员工

你说的失败是什么意思?此查询返回true:
带“hklm\\software\\microsoft\\windows\\currentversion\\run\\xyz”正如TargetObject RETURN TargetObject=~'hklm\\\\software\\\\microsoft\\\\windows\\\\currentversion\\\\run.*'
对不起,我的意思是第一个查询没有返回任何结果。我认为您需要提供一个数据示例,以便检查查询。例如,在控制台中:您不小心在hklm之前放置了一个空格,不是吗=P如果
LTRIM(r.TargetObject)=~''
修复了它,那肯定是您的问题。(这是左修剪。还有一个RTRIM和修剪功能)不,hklm前面没有空间。即使是
“hklm\\\\.*”
也可以工作。但是,当我将“s”添加到正则表达式
'hklm\\\\s.*
时,它不会返回任何结果。