我一定是在做我的正则表达式错误。
在控制台中我做
db.triples.find({sub_uri: /.*pdf.*/ });
并获得所需的结果。
我的Java类看起来像这样,(我设置了input =“pdf”):
public static List<Triple> search(String input){
DB db=null;
try {
db = Dao.getDB();
}
catch (UnknownHostException e1) { e1.printStackTrace(); }
catch (MongoException e1) { e1.printStackTrace(); }
String pattern = "/.*"+input+".*/";
System.out.println(input);
List<Triple> triples = new ArrayList<Triple>();
DBCollection triplesColl = null;
try {
triplesColl = db.getCollection("triples"); } catch (MongoException e) { e.printStackTrace();}
{
Pattern match = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
BasicDBObject query = new BasicDBObject("sub_uri", match);
// finds all people with "name" matching /joh?n/i
DBCursor cursor = triplesColl.find(query);
if(cursor.hasNext()){
DBObject tripleAsBSON = cursor.next();
Triple t = new Triple();
t.setSubject(new Resource((String)tripleAsBSON.get("sub_uri")));
System.out.println(t.getSubject().getUri());
triples.add(t);
}
}
return triples;
}
从控制台我得到12个结果,从Java代码我得不到结果。
答案 0 :(得分:9)
Java不需要/理解正则表达式分隔符(正则表达式周围的/
)。你需要删除它们:
String pattern = ".*"+input+".*";
我也不确定那个正则表达式是不是你想要的。至少你应该锚定它:
String pattern = "^.*"+input+".*$";
并使用Pattern.MULTILINE
选项进行编译。如果一行不包含您的子正则表达式input
,这可以避免严重的性能损失。您知道input
是正则表达式,而不是逐字字符串,对吗?