2016-06-17 8 views
1

Я пытаюсь получить все документы из моей базы данных, где путь страницы заканчивается с определенным выражением, используя этот код:Монго DB и Java заканчивается Regex

query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/")); 

и где выражение заменяется значениями типа». html "," .JSON "," contact/","/"... У меня нет ошибок, но результатов нет, хотя при тестировании моего регулярного выражения на https://regex101.com/ он работает, и одна из ссылок, по крайней мере, совпадает.

enter image description here

+0

Попробуйте 'выражение +" $ "'. Кроме того, вам нужно как-то избежать «.». Итак, возможно, «BasicDBObject query = new BasicDBObject();», а затем 'query.put (pagepath, Pattern.compile (Pattern.quote (выражение) +« $ »));' –

+0

танки, но это не сработало, и я мой запрос выглядит так: '{" \ "pagepath \" ": {" $ regex ":" \\ Q.html \\ E $ "}}' –

+0

Должны ли имена столбцов находиться внутри буквенных двойных кавычек? Во всяком случае, регулярное выражение кажется правильным сейчас. –

ответ

0

Это решение: query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));

+0

Итак, это означает, что вам нужно сопоставить всю строку, 'matches()' в фоновом режиме. Тем не менее, это не совсем правильный подход, потому что вам нужно указывать выражение, иначе, если оно содержит специальные метасимволы регулярных выражений, вы получите сообщение об ошибке. –

1

Решение, которое будет учитывать любые специальные символы в expressionи потенциальных новой строки символов в строке является

query.put(pagepath, new BasicDBObject("$regex", "(?s).*" + Pattern.quote(expression) + "$")); 

Четыре очка являются:

  • Вы должны соответствовать строкам в всего, так что вам нужно использовать .* перед expression
  • Если строка имеет новые строки, вам необходимо пройти модификатор (?s) DOTALL так, что . может также соответствовать новым строке символов
  • Вы должны Pattern.quote в expression так, чтобы он правильно работает с запросами, которые имеют, скажем, [ в них
  • Вам не нужно ( и ) вокруг expression как это отлов группа нигде не используется позже.

 Смежные вопросы

  • Нет связанных вопросов^_^