我正在尝试使用以下代码从我的数据库中获取页面路径以某个表达式结尾的所有文档:
query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/"));
并且表达式被“.html”、“.JSON”、“contact/”、“/”之类的值替换......我没有收到错误但也没有结果,即使当我在https:/上测试我的正则表达式时/regex101.com/它可以工作,并且其中一个链接至少匹配。
我正在尝试使用以下代码从我的数据库中获取页面路径以某个表达式结尾的所有文档:
query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/"));
并且表达式被“.html”、“.JSON”、“contact/”、“/”之类的值替换......我没有收到错误但也没有结果,即使当我在https:/上测试我的正则表达式时/regex101.com/它可以工作,并且其中一个链接至少匹配。
解决字符串中的任何特殊字符expression
和潜在换行符的解决方案是
query.put(pagepath, new BasicDBObject("$regex", "(?s).*" + Pattern.quote(expression) + "$"));
四点是:
.*
在expression
(?s)
DOTALL 修饰符,以便也.
可以匹配换行符Pattern.quote
,expression
以便它可以正确处理其中包含的[
查询(
和)
周围expression
,因为此捕获组以后不会在任何地方使用。这是解决方案:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));