【问题标题】:Neo4j- Cypher Email validation through Regular ExpressionNeo4j- 通过正则表达式验证 Cypher 电子邮件
【发布时间】:2018-05-14 01:19:55
【问题描述】:

如何使用 Neo4j 中的正则表达式过滤垃圾邮件。我对正则表达式的了解很少。在 google 中找到的用于电子邮件验证的正则表达式在 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"

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

【问题讨论】:

  • 你尝试了什么样的正则表达式?具体如何? stackoverflow.com/help/mcve
  • 再次,您可以轻松地在 Java 上编写用户定义的函数。
  • @stdob-- 添加了我所做的研究。请看一看。

标签: regex neo4j cypher


【解决方案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

【讨论】:

  • 很遗憾,regexGroups 过程在 3.0.7 中不可用。
猜你喜欢
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2011-10-27
  • 2012-09-25
相关资源
最近更新 更多