次のコードを使用して、ページ パスが特定の式で終わるデータベースからすべてのドキュメントを取得しようとしています。
query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/"));
式は「.html」、「.JSON」、「contact/」、「/」などの値に置き換えられます... https:/ /regex101.com/動作し、リンクの 1 つが少なくとも一致します。
次のコードを使用して、ページ パスが特定の式で終わるデータベースからすべてのドキュメントを取得しようとしています。
query.put(pagepath, new BasicDBObject(
"$regex", "/(" +expression+ ")$/"));
式は「.html」、「.JSON」、「contact/」、「/」などの値に置き換えられます... https:/ /regex101.com/動作し、リンクの 1 つが少なくとも一致します。
文字列内の特殊文字expression および潜在的な改行記号を説明するソリューションは次のとおりです。
query.put(pagepath, new BasicDBObject("$regex", "(?s).*" + Pattern.quote(expression) + "$"));
ポイントは次の4点です。
.*、expression(?s)するように DOTALL 修飾子を渡す必要があります.Pattern.quoteするようにする必要がありますexpression[(、)前後に移動する必要はありません。expressionこれが解決策です:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));