Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Java中Mongo的正则表达式查询有问题_Java_Regex_Mongodb - Fatal编程技术网

对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);