Øyv*_*ind 5 regex neo4j cypher
我正在尝试匹配Neo4j数据库中的节点.节点有一个名为"name"的属性,我在Cypher中使用正则表达式来匹配它.我只想匹配整个单词,所以如果我提供字符串"java","javascript"应该不匹配.如果要匹配的字符串是几个单词,即"java script",我将执行两个单独的查询,一个用于"java",一个用于"script".
这是我到目前为止:
match (n) where n.name =~ '(?i).*\\bMYSTRING\\b.*' return n
Run Code Online (Sandbox Code Playgroud)
这有效,但它不适用于某些特殊字符,如"+"或"#".所以我无法搜索"C++"或"C#"等.上面代码中的正则表达式只是使用\ b作为字边界.它也逃避它,所以它正常工作.
我尝试了这篇文章的一些版本:正则表达式匹配从特殊字符开始的单词边界,但它没有真正起作用,也许我做错了.
如何使用Cypher和Neo4j中的特殊字符进行此操作?
尝试转义特殊字符并查找非单词字符而不是单词边界。例如;
match (n) where n.name =~ '(?i).*(?:\\W|^)C\\+\\+(?:\\W|$).*' return n
Run Code Online (Sandbox Code Playgroud)
尽管这仍然存在一些误报,例如上面的内容将匹配“c++”。
对于“非单词字符,除了我们希望将 + 视为单词字符”,以下内容可以工作。
match (n) where n.name =~ '(?i).*(?:[\\W-[+]]|^)C\\+\\+(?:[\\W-[+]]|$).*' return n
Run Code Online (Sandbox Code Playgroud)
尽管并非所有正则表达式风格都支持这一点,而且我不确定 Neo4j 是否支持这一点。