regex - 使用正则表达式进行密码查询

标签 regex neo4j cypher

我正在尝试匹配 Neo4j 数据库中的节点。节点有一个名为“name”的属性,我在 Cypher 中使用正则表达式来匹配它。我只想匹配整个单词,所以如果我提供字符串“java”,“javascript”不应该匹配。如果要匹配的字符串是多个单词,即“java script”,我将执行两个单独的查询,一个用于“java”,另一个用于“script”。

这是我到目前为止:

match (n) where n.name =~ '(?i).*\\bMYSTRING\\b.*' return n

这有效,但它不适用于某些特殊字符,如“+”或“#”。所以我不能搜索“C++”或“C#”等。上面代码中的正则表达式只是使用\b作为单词边界。它也在逃避它,因此它可以正常工作。

我尝试了这篇文章的一些版本:regex to match word boundary beginning with special characters但它并没有真正起作用,也许我做错了什么。

如何在 Cypher 和 Neo4j 中使用特殊字符进行这项工作?

最佳答案

尝试转义特殊字符并查找非单词字符而不是单词边界。例如;

match (n) where n.name =~ '(?i).*(?:\\W|^)C\\+\\+(?:\\W|$).*' return n

虽然这仍然有一些误报,例如上面的将匹配“c+++”。

对于“非单词字符,除非我们想将 + 视为单词字符”,以下可以工作。
match (n) where n.name =~ '(?i).*(?:[\\W-[+]]|^)C\\+\\+(?:[\\W-[+]]|$).*' return n

尽管并非所有正则表达式都支持这一点,但我不确定 Neo4j 是否支持这一点。

关于regex - 使用正则表达式进行密码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25908943/

相关文章:

neo4j - 如何在具有共同属性的两个节点之间创建关系?

java - 使用 java 正则表达式匹配器时出现意外结果

database - 如何在非常大的图中添加边(关系)Neo4j

Neo4j 双向关系

neo4j - 加入 Cypher 查询?

neo4j Cypher 分层树构建对 JSON 的响应

java - 什么是控制字符的正则表达式?

java - 从 HTML 中获取 href 标签

javascript - 如何从 url 查询中删除参数?

neo4j - 如何通过 REST API 查看 Neo4j 的 DELETE 是否成功?