Próbuję dopasować węzły w bazie danych Neo4j. Węzły mają właściwość o nazwie "nazwa" i używam wyrażenia regularnego w programie Cypher, aby dopasować to. Chcę tylko dopasować całe słowa, więc "javascript" nie powinien pasować, jeśli dostarczę ciąg "java". Jeśli ciąg do dopasowania jest kilku słów, tj. "Skrypt java", zrobię dwa oddzielne zapytania, jeden dla "java" i jeden dla "skryptu".Zapytanie Cypher z wyrażeniem regularnym
To, co mam tak daleko:
match (n) where n.name =~ '(?i).*\\bMYSTRING\\b.*' return n
To działa, ale nie działa z niektórych znaków specjalnych, takich jak „+” lub „#”. Więc nie mogę wyszukać "C++" lub "C#" itp. Wyrażenie regularne w powyższym kodzie używa po prostu \ b dla granicy słowa. również ucieka, więc działa poprawnie.
Próbowałem niektóre wersje tego posta: regex to match word boundary beginning with special characters, ale to naprawdę nie działa, może zrobiłem coś złego.
Jak mogę wykonać tę pracę ze znakami specjalnymi w Cypher i Neo4j?
Normalnie działałoby, ale granica słowa \ b działa tylko ze znakami alfanumerycznymi, więc nie pasuje do właściwości takich jak "C++" (która zaczyna się lub kończy specjalnym znakiem). Pasowałoby do właściwości takich jak "C++ c", ponieważ kończy się na "c". –
@ Øyvind Zaktualizowano. – Taemyr
To działało, ale było również dopasowane, jeśli przed napisaniem lub po nim były znaki, o których wspominasz w zaktualizowanej odpowiedzi. Czy istnieje sposób, aby dopasować tylko do całych słów? Czy zaktualizowana odpowiedź nie byłaby taka sama jak "(? I). * C \\ + \\ +. *? –