Neo4j- Cypher通过正则表达式验证电子邮件

时间:2017-11-30 07:20:57

标签: regex neo4j cypher

如何使用Neo4j中的正则表达式过滤垃圾邮件。我对正则表达式知之甚少。在谷歌中找到的电子邮件验证的正则表达式在cypher中不起作用。

请提供一些通过正则表达式在cypher中验证电子邮件的示例。

以下是我在Neo4j中尝试使用apoc程序的内容。

查询:

MATCH (n:Person) where exists(n.person_email)
WITH n 
CALL apoc.text.regexGroups(n.person_email,'^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$') YIELD value
RETURN n.person_email, value order by n.person_email LIMIT 1000

错误:

Invalid input '-': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't', '_', '%', UTF16 or UTF32 (line 3, column 58 (offset: 111))
"CALL apoc.text.regexGroups(n.person_email,'^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$') YIELD value"

注意:从谷歌搜索中复制正则表达式

1 个答案:

答案 0 :(得分:1)

在幕后,你的正则表达式在 APOC 中解析为java字符串。因为字符\是Java中的转义字符,如果你真的想要\字符,你需要加倍它。

所以你的查询就变成了这个:

WITH "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" AS regex
MATCH (n:Person) where exists(n.person_email)
RETURN n.person_email, apoc.text.regexGroups(n.person_email,regex) AS value 
ORDER BY n.person_email LIMIT 1000

此外,我对查询做了一些修改:

  • 将正则表达式添加为字符串参数
  • apoc.text.regexGroup现在可以用作函数

修改

如果您只想使用正则表达式检查字段的有效性,可以在普通密码中执行,正则表达式运算符存在:

MATCH (n:Person) 
WHERE  n.person_email =~ "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$"
RETURN n