我正在尝试在我的边缘执行匹配此属性
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
答案 0 :(得分:1)
让我看看是否可以澄清一下。
正则表达式hklm\\\\s.*
在字符串对象中,创建时将转义\
并保存为hklm\\s.*
。然后,一旦对正则表达式求值,它将作为新的字符串/正则表达式对象进行处理,该对象也转义了\
。这意味着您搜索的正则表达式为hklm\s.*
,与目标字符串(具有双\
的字符串)不匹配。
与hklm\\\\.*
不同的是,正则表达式hklm\.*
将是.
,它与目标匹配(因为hklm\s.*
与任何字符都匹配)。
最后要获得正确的正则表达式,原始查询正则表达式中需要更多\
(数量的两倍)。评估后,正则表达式hklm\\\\\\\\s.*
将变为hklm\\s.*
,它应与您的目标匹配。
我使用Neo4j浏览器尝试了一个小例子,然后添加了额外的\
确实有用。
希望这会有所帮助,
特蕾丝
Neo4j员工
答案 1 :(得分:0)
唯一的解决方法是使用此表达式r.TargetObject=~'hklm\\\\.*s.*'