Neo4j Cypher正则表达式不匹配

时间:2018-05-25 07:23:58

标签: regex neo4j cypher

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

  

TargetObject: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

Expected Output

2 个答案:

答案 0 :(得分:1)

让我看看是否可以澄清一下。

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

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

最后要获得正确的正则表达式,原始查询正则表达式中需要更多\(数量的两倍)。评估后,正则表达式hklm\\\\\\\\s.*将变为hklm\\s.*,它应与您的目标匹配。

我使用Neo4j浏览器尝试了一个小例子,然后添加了额外的\确实有用。

希望这会有所帮助,
特蕾丝
Neo4j员工

答案 1 :(得分:0)

唯一的解决方法是使用此表达式r.TargetObject=~'hklm\\\\.*s.*'