如何使用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"
注意:从谷歌搜索中复制正则表达式
答案 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