在Cypher中使用超出匹配的正则表达式

时间:2013-06-27 18:54:08

标签: neo4j cypher

我进行以下查询

neo4j-sh (?)$ start n=node(*) where n.name  =~ 'u(.*)' return n; 
==> +-----------------------+
==> | n                     |
==> +-----------------------+
==> | Node[311]{name:"u1"}  |
==> | Node[312]{name:"u2"}  |
==> | Node[313]{name:"u3"}  |
==> | Node[314]{name:"u4"}  | 

我想添加一个“userId”属性,并在名称键中设置它。我的意思是我想要

==> +-----------------------+
==> | n                     |
==> +-----------------------+
==> | Node[311]{name:"u1", userId:'1'}  |
==> | Node[312]{name:"u2", userId:'2'}  |
==> | Node[313]{name:"u3"},userId:'3'  |
==> | Node[314]{name:"u4"}, userId:'4' | 

现在我需要从n.name中删除数字。 我怎样才能做到这一点?如何从正则表达式中的(。*)获取值?

2 个答案:

答案 0 :(得分:1)

你不能在Cypher中做到这一点(据我所知) - 正则表达式只是为了匹配。

如果它前面只有一个字母,你可以使用子字符串:

start n=node(*) 
set n.userId = substring(n.name, 1)

答案 1 :(得分:0)

我遇到了同样的问题,所以我开发了一个小小的Neo4j服务器插件,它允许您通过REST API运行正则表达式,并针对字符串节点属性运行匹配/拆分/替换目的。它可以在Neo4j控制台内返回结果或将它们保存到属性中。

看看它,也许你觉得它很有用:https://github.com/mszargar/Regx4Neo

安装只需一分钟,但您必须重新启动Neo4才能使其生效。