对Java中Mongo的正则表达式查询有问题
到对Java中Mongo的正则表达式查询有问题,java,regex,mongodb,Java,Regex,Mongodb,到 我将得到正确的结果,但前提是名称字段中的字符串以“st”开头,如“Stephanie”。这不是我想要的…我也应该得到像“贾斯汀”这样的名字。目前我得到的是“Nalissa”,示例代码也在最顶端,它甚至不包含st.,在Java语言中,与许多其他语言不同的是,当且仅当整个字符串与正则表达式匹配时,字符串才与正则表达式匹配 将“*”添加到正则表达式的末尾: "^" + Pattern.quote(searchQuery) 另外请注意,您不需要在开始时使用“^”,也不需要在结束
我将得到正确的结果,但前提是名称字段中的字符串以“st”开头,如“Stephanie”。这不是我想要的…我也应该得到像“贾斯汀”这样的名字。目前我得到的是“Nalissa”,示例代码也在最顶端,它甚至不包含st.,在Java语言中,与许多其他语言不同的是,当且仅当整个
字符串
与正则表达式匹配时,字符串
才与正则表达式匹配
将“*”
添加到正则表达式的末尾:
"^" + Pattern.quote(searchQuery)
另外请注意,您不需要在开始时使用
“^”
,也不需要在结束时使用“$”
,因为它们在必须匹配整个字符串时是隐含的,这是使用正则表达式的一个非常好的教程,请尝试一下。用“^.*+模式制作一个临时字符串。引用(searchQuery)
,然后看看它是什么。调试某些东西时不需要混淆。在Perl中,\Q..\E
解析为\.\.
在Java中是这样的吗?尝试不使用\Q\E
符号,看看它是否有效。如果是,请使用单独的正则表达式来引用元字符,例如用\\$&
替换\\$或等效的正则表达式,而不是静态函数。@Maxt8r是的,java是相同的:“\\Qquoted regex\\E”
或Pattern.quote(一些正则表达式)
做同样的事情。@Bohemian-我相信只需要\Q
,在编译正则表达式时,它将引用到字符串的末尾。至少在Perl中是这样的。我相信Java正则表达式,Matcher类也有一个find()方法和matches()方法。[我用谷歌搜索了Mondodb查询,它们似乎使用不同的正则表达式引擎。我似乎找不到一个不同的参数定义来定义它们的过滤器。regex()这定义了模式参数的使用方式。它们似乎有一个Find()函数,该函数接受一个正则表达式,可能使用Java Find()matcher方法,但我不知道。另外,如果将matches()与带有多行标志的正则表达式一起使用,则锚点并不意味着BOS/EOS。在多行字符串上,应该使用dot all修饰符。
"^.*" + Pattern.quote(searchQuery)
"^" + Pattern.quote(searchQuery)
BsonDocument regexFilter = Filters
.regex("name", ".*" + Pattern.quote(searchQuery) + ".*", "i")
.toBsonDocument(null, null);