$regex
¶为查询中的模式匹配字符串提供正则表达式功能 。MongoDB使用具有UTF-8支持的Perl兼容正则表达式(即“ PCRE”)版本8.42。
要使用$regex
,请使用以下语法之一:
在MongoDB中,您还可以使用正则表达式对象(即
/pattern/
)来指定正则表达式:
有关特定语法使用的限制,请参见 $ regex与/ pattern /语法。
$options
¶以下内容<options>
可用于正则表达式。
选项 | 描述 | 语法限制 |
---|---|---|
i |
不区分大小写,以匹配大小写。有关示例,请参见执行不区分大小写的正则表达式匹配。 | |
m |
对于包含锚点的模式(即 如果模式不包含锚点,或者字符串值不包含换行符(例如 |
|
x |
“扩展”功能可以忽略模式中的所有空白字符, 此外,它会忽略中间的字符,包括未转义的井号/磅( 该 |
需要$regex 与$options 语法 |
s |
允许点字符(即. )匹配所有字符,包括换行符。有关示例,请参阅使用。点字符以匹配换行符。 |
需要$regex 与$options 语法 |
对于区分大小写的正则表达式查询,如果该字段存在索引,则MongoDB会将正则表达式与索引中的值进行匹配,这可能比集合扫描更快。如果正则表达式是“前缀表达式”,则可能会发生进一步的优化,这意味着所有潜在的匹配都以相同的字符串开头。这允许MongoDB从该前缀构造一个“范围”,并且仅与该范围内的索引值匹配。
如果正则表达式以尖号(^
)或左锚(\A
)开头,后跟一串简单符号,则为“前缀表达式” 。例如,/^abc.*/
将仅通过匹配索引中以开头的值来优化正则表达式abc
。
此外,虽然/^a/
,/^a.*/
和/^a.*$/
匹配等效的字符串,但它们具有不同的性能特征。如果存在适当的索引,则所有这些表达式都使用索引;但是,/^a.*/
和/^a.*$/
较慢。/^a/
匹配前缀后可以停止扫描。
不区分大小写的正则表达式查询通常不能有效地使用索引。该$regex
实现不支持排序规则,并且无法使用不区分大小写的索引。