Mongo 数据库和 Java 以正则表达式结尾
Mongo DB and Java ends with Regex
我正在尝试使用以下代码从我的数据库中获取页面路径以特定表达式结尾的所有文档:
query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/"));
表达式被替换为“.html”、“.JSON”、"contact/"、“/”...
我没有收到任何错误,但也没有任何结果,尽管当我在 https://regex101.com/ 上测试我的正则表达式时它有效并且其中一个链接至少匹配。
这是解决方案:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));
解决字符串中 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+ ")$/"));
表达式被替换为“.html”、“.JSON”、"contact/"、“/”... 我没有收到任何错误,但也没有任何结果,尽管当我在 https://regex101.com/ 上测试我的正则表达式时它有效并且其中一个链接至少匹配。
这是解决方案:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));
解决字符串中 expression
和 潜在换行符中的任何特殊字符的解决方案是
query.put(pagepath, new BasicDBObject("$regex", "(?s).*" + Pattern.quote(expression) + "$"));
四点是:
- 您需要匹配整个字符串,所以您需要在
expression
之前使用 - 如果字符串有换行符,需要传递
(?s)
DOTALL修饰符,这样.
也可以匹配换行符 - 您需要
Pattern.quote
expression
以便它可以正确处理包含[
的查询 - 您不需要
(
和expression
周围的)
,因为此捕获组以后不会在任何地方使用。
.*