1

我正在尝试使用以下代码从我的数据库中获取页面路径以某个表达式结尾的所有文档:

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

并且表达式被“.html”、“.JSON”、“contact/”、“/”之类的值替换......我没有收到错误但也没有结果,即使当我在https:/上测试我的正则表达式时/regex101.com/它可以工作,并且其中一个链接至少匹配。

在此处输入图像描述

4

2 回答 2

2

解决字符串中的任何特殊字符expression 潜在换行符的解决方案是

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

四点是:

  • 你需要匹配整个字符串,所以你需要.*expression
  • 如果字符串有换行符,则需要传递(?s)DOTALL 修饰符,以便也.可以匹配换行符
  • 您需要这样做Pattern.quoteexpression以便它可以正确处理其中包含的[查询
  • 您不需要()周围expression,因为此捕获组以后不会在任何地方使用。
于 2016-06-24T10:25:00.170 回答
-1

这是解决方案:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));

于 2016-06-22T15:43:03.773 回答