1

次のコードを使用して、ページ パスが特定の式で終わるデータベースからすべてのドキュメントを取得しようとしています。

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

式は「.html」、「.JSON」、「contact/」、「/」などの値に置き換えられます... https:/ /regex101.com/動作し、リンクの 1 つが少なくとも一致します。

ここに画像の説明を入力

4

2 に答える 2

2

文字列内の特殊文字expression および潜在的な改行記号を説明するソリューションは次のとおりです。

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

ポイントは次の4点です。

  • 文字列全体に一致させる必要があるため.*expression
  • 文字列に改行がある場合は、改行記号にも一致(?s)するように DOTALL 修飾子を渡す必要があります.
  • たとえば、クエリが含まれているクエリで正しく機能Pattern.quoteするようにする必要がありますexpression[
  • このキャプチャ グループは後でどこにも使用されないため()前後に移動する必要はありません。expression
于 2016-06-24T10:25:00.170 に答える
-1

これが解決策です:query.put(pagepath, new BasicDBObject("$regex", ".*(" + expression + ")$"));

于 2016-06-22T15:43:03.773 に答える