Regex Neo4j Cypher正则表达式不匹配
我正在尝试在我的边缘中匹配此属性 目标对象:hklm\\software\\microsoft\\windows\\currentversion\\run\\xyz 为什么这个正则表达式会失败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)-[
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.*
时,它不会返回任何结果。