2013年9月13日 星期五

使用 MongoDB 的 Java Driver 搜尋帶有斜線 (/) (slash) 的 Regex

由於 MongoDB 的 Java driver 在某個版本以後開始支援 Pattern 物件
因此要在 Java 上使用 Java driver 做 regular expression 時就簡單多了
只要自己先編譯好 Pattern 的物件,直接把 Pattern 丟到 DBObject 的 value 欄位就好了。

這裡做的範例是想要透過 regular expression 找到資料庫中 path 欄位包含指定某個字串的資料。
一般只是普通字串時,其實只要直接編譯 Pattern 即可
不過如果字串包含 / 時,就會變得複雜一些,需要把 / 置換成 \\/ 才能在 Java 裡面正常運作。

// Construct the regex pattern.
String slashMatcher = Matcher.quoteReplacement("\\/");
Pattern pattern = Pattern.compile("^" + path.replaceAll("/", slashMatcher));
// Search.
DBObject result = coll.findOne("path", pattern);

參考資料:
1、Forward slash in Java Regex
2、Querying for field starting with slash through Java driver

沒有留言: